🫥
[docker]コンテナ間の通信
はじめに
Dockerfileをディレクトリごとに分けたあと、もちろん一つのコンテナから分割されるためlocalhost
で接続できません。
そこでコンテナ間で通信する備忘録をまとめます
動作環境
macOS 14.2.1 (23C71)
Docker 24.0.7
目標
- networkを作る
- docker-compose.ymlでコンテナを同じnetworkに入れる
- 実際に通信する
手順
networkを作る
$ docker network create net_test
-
net_test
の部分は好きな名前でいい。今回はこれで説明する
docker-compose.ymlでコンテナを同じnetworkに入れる
docker-compose.yml
version: '3'
services:
api:
build: api/
volumes:
- .dockervenv:/src/.venv
- ./api:/src
ports:
- 8000:8000
+ networks:
+ - net_test
app:
build: app/
volumes:
- ./app:/src
ports:
- 8501:8501
+ networks:
+ - net_test
db:
image: mysql:8.0
platform: linux/x86_64
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: 'demo'
TZ: 'Asia/Tokyo'
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
+ networks:
+ - net_test
+networks:
+ net_test:
+ external: true
これでapi
,app
,db
が同じnetworkに入ってる
確認する
inspect
で確認する
$ docker inspect net_test
[
{
"Name": "net_test",
~~~~(略)~~~~
"Containers": {
"0c1d59f461e6f27ec8893a7903f6a6ac0103f3625dd6f404a18fde5efb47a9a6": {
"Name": "fastapi_test-api-1", <------
"EndpointID": "8b5d7b504788e92a9d90545e2f2c0fd5c0f037bf6311e8aa1a998a1d7cf4e623",
"MacAddress": "02:42:c0:a8:90:04",
"IPv4Address": "192.168.144.4/20",
"IPv6Address": ""
},
"6fa8f8eede8bfeb9f62e026ececd52b3b2055a84fd956f957b2bac9bf78b065a": {
"Name": "fastapi_test-db-1", <------
"EndpointID": "387f758292989cd133fdf0e98cc83627b0a4fbd2be180ac6858d19b67e11ee2f",
"MacAddress": "02:42:c0:a8:90:02",
"IPv4Address": "192.168.144.2/20",
"IPv6Address": ""
},
"e9e93d8437bd19a4d7e4dfc02d88e5bbf498785cd8deaf7a6d24ad3a9db910ab": {
"Name": "fastapi_test-app-1", <------
"EndpointID": "d33fcc97e5650c91cac180b76dead65dcde1867d40119745d22fa35f26a61eba",
"MacAddress": "02:42:c0:a8:90:03",
"IPv4Address": "192.168.144.3/20",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
すべて同じネットワークにちゃんと入ってると確認できた
実際に通信する
- APIに接続するときのURLを変更する
- API_URL="http://127.0.0.1:8000/tasks"
↓
+ API_URL="http://api:8000/tasks"
localhost
(=127.0.0.1
)をdocker-compose.ymlでつけた名前に変更する
Discussion