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. 参考リンク

コメント