2023.4.29
docker-compose.ymlで定義したコンテナがホストPCやDockerのnetwork内でどう見えるか
概要
複数のdocker-compose.ymlで定義した同一docker networkにおける各コンテナの見え方と、ホストPCから見た各コンテナの見え方をまとめました。
環境
今回は以下の docker-compose.yml
ファイルで定義されたserviceが起動している状態を例にします。
ファイル内容はservice名、ポート番号、networksの定義部分のみ記載します。
ポート番号については、説明用にあえてホストPC側のポート番号はDockerネットワーク側に1足した番号にしています。
docker-compose.yml - A
yml_____docker-compose.yml - A_____services:
frontend:
# ...
ports:
- 3001:3000
networks:
sample-network:
external: true
docker-compose.yml - B
yml_____docker-compose.yml - B_____services:
backend:
# ...
ports:
- 4001:4000
db:
# ...
ports:
- 5433:5432
networks:
sample-network:
external: true
コンテナの見え方
①同一docker-compose.ymlのコンテナ間
これが一番シンプルで、単純に <<HOST_NAME>>:<<DOCKER_NETWORK_PORT>>
で良いので db:5432
となります。
Dockerネットワーク内の中の通信なのでポート番号はDockerネットワーク内でのポート番号を指定します。
②異なるdocker-compose.ymlのコンテナ間
異なる docker-compose.yml
で定義されていますが、それぞれ sample-network
という同じネットワークとなるように定義しているため、①と同じく <<HOST_NAME>>:<<DOCKER_NETWORK_PORT>>
で良いので backend:4000
となります。
③Host PCとコンテナ間
例えば図のDB Viewerからdbのコンテナに接続したい場合 <<HOST_NAME>>:<<HOST_PC_PORT>>
となるので localhost:5433
となります。
localhostの5433ポートがDockerネットワークの5432ポートに転送されるので、DB ViewerのようなHost PC上で動作しているアプリケーションからはHOST_NAMEとしてlocalhostを指定します。