2026年9月11日

2026年9月11日

Dockerのcontainer名前解決の仕組みを理解する

はじめに

Dockerは、アプリケーションを軽量で自立型の環境として実行するためのツールです。複数のコンテナを展開し管理する際に、各コンテナ間での通信やサービスの相互参照が必要な場面がよくあります。そのためには、コンテナ間での名前解決の仕組みを理解することが重要です。本記事ではDockerのcontainer名前解決について解説します。

症状・背景

  • Docker Swarmクラスタリングで複数のサービスを展開する際
  • ローカルマシン上で複数のコンテナを起動し相互通信を行う際
  • Kubernetesなどの orchestration tool と連携してデプロイされるコンテナ間でのサービス呼び出し

手順・設定方法

ステップ1: Docker Swarmクラスタリングでの名前解決

# Swarmクラスタリングに参加させるコンテナを作成します
docker service create --name my-app --publish published=80,target=80 my-image

# 他のコンテナからmy-appへのアクセスを確認します
docker service ps my-app

ステップ2: ローカルマシンでの名前解決

# Dockerデーモンが提供するDNSサーバに接続するために、resolv.confファイルを手動で設定します
echo "nameserver 127.0.0.53" > /etc/resolv.conf

# ローカルマシンからコンテナへpingを行う
docker exec -it <container_name> ping my-container-name

ステップ3: カスタムDNSサーバの設定

# DockerネットワークにカスタムDNSサーバを追加します
docker network connect --ipv4 "172.18.0.5" my_network my_container

# そのコンテナから他のコンテナへのpingを行う
docker exec -it <other_container_name> ping 172.18.0.5

ステップ4: 実践/トラブルシュート/監視

# コンテナのネットワーク設定を確認します
docker inspect <container_name>

# ネットワーク内部での名前解決を監視するために、logsコマンドを使用します
docker service logs my-service

注意事項

  • 127.0.0.53はDockerデーモンが提供するDNSサーバのアドレスです。
  • DNSサーバへの接続は、コンテナ間での通信を円滑にするために重要です。
  • ネットワーク設定やIPアドレスはクラスタリングやネットワーク構成によって異なる場合があります。

まとめ

1. Swarmクラスタリング: Swarmクラスタリングではサービス名を使用してコンテナと通信が可能です。

2. ローカルマシンでの名前解決: Dockerデーモンに接続するDNSサーバを設定することで、ローカルからコンテナ間の通信が可能になります。

3. カスタムDNSサーバの利用: ネットワーク内で特定のIPアドレスに名前解決を行うために、カスタムDNSサーバを利用します。

4. ネットワーク監視: Dockerのネットワーク設定を確認し、必要に応じて修正することで、コンテナ間での通信トラブルを防ぎます。

5. 注意点: IPアドレスやサービス名はクラスタリング環境によって異なるため、適切な設定が重要です。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲