32
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker Composerではコンテナ間通信はコンテナ名を指定する

Last updated at Posted at 2018-05-07

まえがき

この記事は、"Dockerでコンテナ間で通信できない"というタイトルでしたが、
コメントなどのおかげで改善されたので記事を修正しました。
ありがとうございます。

docker-composeのコンテナ間は、デフォルトだとコンテナ名で接続できる

今回は、WordPress開発環境を作りたかったので以下のdocker-compose.ymlを用意した。

docker-compose.yml
version: '3.4'
services:

  mysql: #<-コンテナとしてこちらの"mysql"も指定できる
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
    environment:
      MYSQL_ROOT_PASSWORD: root_dumy
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: password_dumy
    ports:
      - 3306:3306
    container_name: db_mysql #<-コンテナ名は"db_mysql"

  web:
    build: wordpress
    volumes:
      - ./html:/var/www/html
    ports:
      - 80:80
    depends_on:
      - mysql
    container_name: wordpress_web

その他、環境は以下の通り

  • windows10 pro(April 2018 Update)
  • docker 18.03.1-ce

docker-compose.ymlのあるフォルダに、htmlフォルダを作成しwordpress関連のファイル一式を配置する。
wordpressからDB(コンテナ)へ接続するための、DB設定ファイルwp-config.phpの接続先をコンテナ名に書き換える。
コンテナ名は、上の設定だとmysql or db_mysqlで動くみたい。

wp-config.php
define('DB_HOST', 'db_mysql:3306');

その他、上のdocker-compose.ymlではDBパスワードなども設定しているので、まとめて設定する。

wp-config.php
define('DB_NAME', 'wordpress');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'user');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password_dumy');

/** MySQL のホスト名 */
define('DB_HOST', 'db_mysql:3306');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8mb4');

実行は、docker-compose.ymlのあるフォルダで

docker起動コマンド
docker-compose up

ブラウザのアドレスにlocalhostを入れることで確認できるはず。

その他知見

dockerのコンテナ内部では、個別にipを割り振れるようです。
おすすめではないですが、コンテナ間通信をipベースで行うこともできます。

以下のコマンドで、割り当てられているipを取得できます。
([contenaName]を各自のコンテナ名に書き換えてね)

cmd
docker exec -it [contenaName] hostname -I

返り値の値を、wp-config.phpのDB_HOSTの行を書き換えると動作しました。

wp-config.php書き換え例
define('DB_HOST', '172.18.0.2:3306');

コンテナ通信は調べると色々ある

コメントで教えてもらいましたが、コンテナにはいくつかの通信モードがあるみたいです。

コンテナ間通信をlocalhostで行ってみたいが、宿題。
教えてもらった、通信の仕組みが理解できれば使える様になる??

32
43
5

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
32
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?