LoginSignup
1
2

More than 5 years have passed since last update.

別のdocker-compose.yml で起動しているサービスに接続する

Last updated at Posted at 2019-01-06

やりたいこと

docker環境で開発を行っていると、docker-compose.yml で管理しているMySQLのコンテナに対して、別の docker-compose.yml で管理しているアプリから接続したくなります。

1つの docker-compose.yml で管理している MySQLのコンテナとアプリのコンテナであれば、 link を使うことで容易に参照できます。 docker-compose.yml が分かれると別のネットワークが割り当てられるので、コンテナ内のプロセスが直接通信できません。

TL;DR

MySQLのコンテナの 3306 ポートがホストにマッピングされているのであれば、アプリのコンテナからデフォルトゲートウェイのIPアドレスのマッピングされたポート番号に接続します。

別のDockerコンテナに接続.png

アプリのコンテナのネットワークの状態を調べる

$ docker inspect app02-myapp | jq '.[0].NetworkSettings.Networks|keys'
[
  "app02_default"
]

接続元になるコンテナに割り当てられたネットワーク名を調べます。 docker inspect でコンテナ情報を取得して、 Networks の下にあるネットワーク名を得ます。ネットワーク名がわかったら、 docker network inspect でネットワークの設定を参照します。

$ docker network inspect app02_default | jq '.[0].IPAM.Config[0].Gateway'
"172.26.0.1"

ここで表示されたIPアドレスがクライアントアプリのデフォルトゲートウェイです。

クライアントアプリから接続する

クライアントアプリからMySQLに接続する際に指定するホストに 172.26.0.1を、上の図であればホストの 13306番ポートがマッピングされているので、ポート番号に 13306 を指定して接続します。

忘れずに行っておくこと

コンテナで動いているMySQLは任意の接続元からの接続を受け付ける状態にしておきます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2