Docker は、開発者がアプリケーションを構築、デプロイ、実行できるようにするオープン ソースのアプリケーション コンテナ エンジンです。コンテナ化されたアプリケーションは多くの場合、タスクを完了するために相互に通信する必要がある複数のコンポーネントで構成されます。ただし、Docker を使用すると、ドメイン名が解決できず、コンテナ間で通信できなくなったり、外部サービスに接続できなくなったりする場合があります。この記事では、この問題を迅速に解決するために役立ついくつかの一般的な原因と解決策について説明します。
Docker コンテナでは、通常、ドメイン名の解決は DNS サーバーを通じて完了します。 Docker がドメイン名を解決できない場合は、DNS サーバーの障害またはネットワークの不安定が原因である可能性があります。この問題を解決するには、次の手順を実行します。
1.1 DNS サーバーの構成を確認する
まず、Docker の DNS 構成が正しいかどうかを確認します。コンテナーでコマンド
cat /etc/resolv.conf
を実行して、DNS サーバーが正しく構成されているかどうかを確認できます。
DNS サーバーの構成が間違っている場合は、Docker デーモンの起動時に --dns
オプションを追加することで、正しい DNS サーバー アドレスを指定できます。例:
dockerd --dns 8.8.8.8
2.2 コンテナーの DNS 構成を変更する
Docker には、コンテナーの DNS 構成を設定する方法も用意されています。 --dns
オプションを使用してコンテナを作成するときに DNS サーバー アドレスを指定できます。例:
docker run --dns 8.8.8.8 nginx
さらに、/etc/docker/daemon.json
ファイルで DNS サーバー アドレスを構成することもできます。例:
{ "dns": ["8.8.8.8", "8.8.4.4"] }
Docker デーモンを再起動すると、これらの構成が有効になります。
Docker コンテナはホスト上で実行されます。ホストのネットワーク接続が不安定な場合、Docker コンテナは外部サービスにアクセスできないか、外部サービスと通信できない可能性があります。他のコンテナとのコミュニケーション。考えられる解決策は次のとおりです。
2.1 ホスト ネットワーク接続を確認する
ホスト上で ping
コマンドを実行して、ネットワーク接続をテストできます。例:
ping www.baidu.com
接続できない場合は、ホストを再起動するか、ネットワーク管理者に問い合わせて問題を解決してください。
2.2 Docker ブリッジ構成の確認
Docker にはブリッジ (ブリッジ) と呼ばれるデフォルトのネットワーク モードがあり、コンテナはこのブリッジを介してホストや他のコンテナと通信します。ブリッジ構成が正しくない場合、コンテナーがドメイン名を解決できない可能性があるため、ホスト マシンで Docker ブリッジ構成を表示して調整できます。次のコマンドで確認できます:
docker network inspect bridge
問題がある場合は、次のコマンドを使用してブリッジを再作成できます:
docker network create bridge
場合によっては、コンテナーと外部サービスの間で通信するときに、ドメイン名解決のキャッシュに関する問題が発生することがあります。これにより、ドメイン名の解決に失敗したり、DNS 解決結果が遅れたりする可能性があります。このような問題が発生した場合は、次の操作を実行できます。
3.1 DNS キャッシュをクリアする
コンテナ内で次のコマンドを実行して、DNS キャッシュをクリアできます:
/etc/init.d/nscd restart
ホストの場合 ホストでこの問題が発生した場合は、次のコマンドを試してください:
sudo service dns-clean restart
3.2 DNS キャッシュのしきい値を変更する
DNS 解決に遅延がある場合その結果、DNS キャッシュのしきい値を変更してみることができます。コンテナーで次のコマンドを実行できます:
echo 2000 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
これにより、DNS キャッシュのしきい値が 2000 ミリ秒に設定されます。
概要
Docker を使用すると、ドメイン名を解決できないという問題が発生することがよくあります。この問題は、DNS サーバーの構成、ネットワーク接続、DNS 解決キャッシュなどのさまざまな要因によって発生する可能性があります。この問題を解決するには多くの方法があります。DNS サーバー構成の確認、コンテナー DNS 構成の変更、ホスト ネットワーク接続の確認、Docker ブリッジ構成の確認、DNS キャッシュのクリア、または DNS キャッシュしきい値の変更によって解決できます。この記事で説明した解決策が問題を迅速に解決し、Docker コンテナ エンジンをより有効に活用するのに役立つことを願っています。
以上がDocker がドメイン名を解決できない理由と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。