質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1365閲覧

Docker上でアプリコンテナからMysqlコンテナへの接続

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/09/02 23:46

DockerFileとdocker-composeを使ってGo(webフレームワーク)とMysqlを使ったプログラムを起動したいと考えています。
docker-compose up をしたところ以下のエラーが出てアプリコンテナから接続できず、起動しない状態です。

api-app | 23:41:20 runner | Running...
api-app | 23:41:20 main | --------------------
api-app | 23:41:20 main | Waiting (loop 2)...
api-app | 23:41:20 app | {"time":"2020-09-02T23:41:20.1061887Z","level":"FATAL","prefix":"echo","file":"main.go","line":"51","message":"dial tcp 192.168.16.2:3333: connect: connection refused"}

macを使用しています。
docker exec -it api-db mysql -u root -pでログインは確認できます。
ご教授よろしくお願いいたします。

main.goの51行目は以下の箇所です。
if err := db.Ping(); err != nil {
e.Logger.Fatal(err)

go

1func connectDB() *sqlx.DB { 2 dsn := "root:password@tcp(api-db:3333)/database" 3 db, err := sqlx.Open("mysql", dsn) 4 if err != nil { 5 e.Logger.Fatal(err) 6 } 7 if err := db.Ping(); err != nil { 8 e.Logger.Fatal(err) 9 } 10 log.Println("db connection succeeded") 11 return db 12}

DockerFile

1FROM golang:latest 2RUN mkdir api 3WORKDIR /api 4 5RUN apt-get update \ 6 && apt-get install -y mariadb-client 7 8 9COPY . . 10 11 12RUN CGO_ENABLED=0 go build -o main main.go 13 14RUN go get github.com/pilu/fresh 15 16CMD ["fresh"]

docker-compose.yml

docker

1version: "3" 2services: 3 app: 4 build: 5 context: . 6 dockerfile: ./docker/app/Dockerfile 7 container_name: api-app 8 volumes: 9 - .:/go/src/api 10 - ./:/go/src/hot_reload_docker 11 ports: 12 - "80:8080" 13 depends_on: 14 - mysql 15 restart: always 16 17 mysql: 18 image: mysql:5.7 19 restart: always 20 container_name: gapi-db 21 environment: 22 MYSQL_USER: root 23 MYSQL_ROOT_PASSWORD: password 24 MYSQL_PASSWORD: password 25 MYSQL_DATABASE: database 26 hostname: mysql 27 ports: 28 - "3333:3306" 29 volumes: 30 - ./docker/db/conf.d:/etc/mysql/conf.d 31 - ./log/mysql:/var/log/mysql 32 - ./db/data:/var/lib/mysql 33 - ./db/initdb.d:/docker-entrypoint-initdb.d 34

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

アプリからapi-dbに接続するときのポートは、3333ではなく、3306が正しいです。

docker-compose.ymlの

docker

1 ports: 2 - "3333:3306"

は、ホストの3333番ポートを、コンテナの3306番ポートに転送する意味で、コンテナ自身は3306番ポートで待ち受けています。

投稿2020/09/03 01:41

bsdfan

総合スコア4520

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/03 02:14

ご回答ありがとうございます。 おかげさまで、うまく起動できました。 しかし、workbench等GUIからMySQLのコンテナに接続したいのですが、ローカルのMySQLと区別する際、3306にしてしまうとMySQLのコンテナに接続できないのですが、回避するための方法はありますでしょうか?
bsdfan

2020/09/03 02:27

コンテナ外からは、今の設定のまま 3333 とかに転送して使ったら問題ないと思います。 コンテナ間 アプリ(コンテナ) ----> dbコンテナ(3306) コンテナ外から 外部アプリ ----> localhost(3333) ---転送---> dbコンテナ(3306)
退会済みユーザー

退会済みユーザー

2020/09/03 02:40

あ、なるほど、理解できました。 ご回答ありがとうございました????‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問