0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:Dockerのネットワークがつながらない場合に、Docker Composeで簡単に統一する方法

Last updated at Posted at 2025-02-13

はじめに

Docker を利用する際、複数のコンテナ間で通信を行うには適切なネットワーク設定が必要です。

ネットワークの設定が不十分だと、コンテナ同士が接続できずエラーが発生することがあります。

本記事では、Docker Compose を使ってコンテナのネットワークを統一する方法を解説します。適切な設定を行うことで、よりスムーズなコンテナ間通信を実現できます。

書こうと思った理由

Docker を使う中で、コンテナ間の通信がうまくいかない経験をしたことがあります。

特に docker-compose.yml でネットワークを適切に設定しないと、コンテナが相互に接続できない問題が発生しがちです。

この問題を解決するために、ネットワークの統一方法を整理し、分かりやすく解説したいと思いました。同じ問題で悩む方の助けになれば幸いです。

Docker のネットワークを統一する方法

Docker を使用する際、複数のコンテナ間で通信を行う必要があります。しかし、適切にネットワークを設定しないと、コンテナ同士が接続できず、エラーが発生することがあります。

ネットワークの問題点

以下の docker-compose.yml を例に、ネットワークの問題を確認します。

version: '3.9'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/usr/src/app
    ports:
      - '1323:1323'
    tty: true
    depends_on:
      - dev-mysql

  dev-mysql:
    image: mysql:8.0
    ports:
      - '3308:3306'
    container_name: dev-mysql
    platform: linux/x86_64
    env_file:
      - .env
    networks:
      - app-network
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 30s
    volumes:
      - mysql-data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - dev-mysql
    environment:
      PMA_HOST: dev-mysql
      PMA_PORT: 3306
    env_file:
      - .env
    ports:
      - '4000:80'
    networks:
      - app-network
    volumes:
      - ./phpmyadmin/sessions:/sessions

volumes:
  mysql-data:
    driver: local

networks:
  app-network:
    driver: bridge

この設定には問題があります。それは、app サービスに networks: app-network の指定がないため、dev-mysql に接続できない可能性があることです。

ネットワークを統一する修正方法

以下のように appnetworks: app-network を追加することで、コンテナ間の通信を統一できます。

version: '3.9'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/usr/src/app
    ports:
      - '1323:1323'
    tty: true
    depends_on:
      - dev-mysql
    networks:
      - app-network  # ネットワークを追加

  dev-mysql:
    image: mysql:8.0
    ports:
      - '3308:3306'
    container_name: dev-mysql
    platform: linux/x86_64
    env_file:
      - .env
    networks:
      - app-network
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 30s
    volumes:
      - mysql-data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - dev-mysql
    environment:
      PMA_HOST: dev-mysql
      PMA_PORT: 3306
    env_file:
      - .env
    ports:
      - '4000:80'
    networks:
      - app-network
    volumes:
      - ./phpmyadmin/sessions:/sessions

volumes:
  mysql-data:
    driver: local

networks:
  app-network:
    driver: bridge

ネットワークの確認方法

ネットワークが正しく作成されたかを確認するには、以下のコマンドを使用します。

docker network ls

networks で設定した内容が一覧に表示されていることを確認してください。

実際のコマンド画面

Screenshot 2025-02-13 at 11.42.02.png

また、ネットワークの詳細を確認するには、以下のコマンドを使用します。

docker network inspect <特定のネットワークの ID>

実際のコマンド画面

Screenshot 2025-02-13 at 11.45.09.png

コンテナが <特定のネットワークの ID> に接続されていることを確認しましょう。

ここまでの簡単なまとめ

  • ネットワークを統一するために、全コンテナに networks: app-network を指定
  • docker network inspect app-network で接続状況を確認
  • ping dev-mysqlnc -zv dev-mysql 3306 で接続テスト

おまけ:接続テストコマンド紹介

app から dev-mysql に接続できるかを確認するために、以下のコマンドを実行します。

docker exec -it <appコンテナID> sh

その後、コンテナ内で以下を実行します。

ping dev-mysql

もしくは、ポートが開いているかを確認するために以下を実行します。

nc -zv dev-mysql 3306

成功すれば、ネットワークが正しく設定されています。

まとめ

Docker でコンテナ間通信を行うには、統一されたネットワークを設定することが重要です。

docker-compose.yml で各コンテナに networks: app-network を指定することで、確実に接続できるようになります。

また、docker network inspect を使って設定を確認し、pingnc で接続テストを行いましょう。適切なネットワーク管理で、安定したコンテナ環境を構築できます!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?