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アドレスやサービス名はクラスタリング環境によって異なるため、適切な設定が重要です。
関連記事: