🫥

[docker]コンテナ間の通信

2024/01/20に公開

はじめに

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でつけた名前に変更する

GitHubで編集を提案

Discussion