docker-compose 別のdocker-composeで作成したコンテナからアクセスできるようにする

docker-compose 他のコンテナから接続する docker

docker-composeでローカルでサーバ構築してwebアプリ作成しているんですが、node.js+mariadbのサーバと、別で作成したdocker-composeのPHPから前者のmariadbにアクセスしたいということがあり調べてみました。

ネットワークの定義を追加することで、外部からのアクセスもOKということになるようです。

スポンサーリンク

1.まずはdocker network lsでネットワーク一覧を見る

docker-composeで作成したサーバは1つ1つネットワークがついています。
docker network lsで調べると下記のようなイメージです。

docker network ls
NETWORK ID     NAME             DRIVER    SCOPE
000001      nodemaria_default   bridge    local
000002      php73_default       bridge    local

もしも、nodejs+mariadb内のmariadbをphp73からも見たい場合は、新たにmariadbネットワークを作り、そのネットワーク名を公開するmariadbとyml、php73とymlに追加すればOKです。

1.1 docker network createで新規ネットワーク生成

共通ネットワークを作成します

docker network create –driver bridge mariadb_network

作成したら docker network lsで確認

docker network ls
NETWORK ID     NAME             DRIVER    SCOPE
000001      nodemaria_default   bridge    local
000002      php73_default       bridge    local
000003      mariadb_network     bridge    local

1.1.1 名前間違ったらdocker network rm 名称

間違ったらdocker network rm ネットワーク名 で削除すればOK

2. 公開する側と使う側のdocker-compose.ymlに記載

dbがあるほうのdocker-compose.ymlにdbコンテナとトップレベルにnetworksを。external: trueで公開

2.1 node+mariadb側のdocker-compose.yml

version: '3'
services:
  ....
  mariadb:
    container_name: mariadb
    ....
    networks:
     - mariadb_network
  ....
networks:
 mariadb_network:
  external: true

2.2 php73側のdocker-compose.yml

version: '3'
services:
  ...
  php:
   container_name: php73
   ...
   networks:
    - mariadb_network
   ...
networks:
 matiadb_network:
  external: true

3. phpコンテナ側からmariadbコンテナに接続してみる

php73の設定でnetworksにmariadb_networkが設定してあるので、2.1で設定したmariadb container_nameがhostnameになります。

普通に成功しますね。networksを記載していないと、docker-compose毎に追加されたxx_defaultが使われるのかと。
もし、特定のコンテナで他のネットワークを使うなら、docker-compose.ymlのトップレベルにnetworks: network名、external:true を明記し、使うコンテナでnetworks: -network名でこのコンテナではnetwork名コンテナを使うということになるようです。

9. 参考リンク

Compose の ネットワーク機能(networking) — Docker-docs-ja 24.0 ドキュメント
docker-compose で別の docker-compose.yml で作ったコンテナとリンクする (ネットワークを繋げる) - Qiita
バーチャルホストのように、1つのサーバーに複数のWebアプリを置いておきたい場合があります。その際に、nginxと各アプリにはそれぞれの docker-compose.yml を作って別々に管理し…

コメント

タイトルとURLをコピーしました