Docker がホスト DNS で動作しない場合の解決策
Docker は、ポータブルでスケーラブルなコンテナ化環境を提供する、広く使用されているアプリケーション コンテナ化プラットフォームです。ただし、Docker をホスト DNS と併用すると、ドメイン名を解決できない、待ち時間が長いなど、さまざまな問題が発生することがあります。この記事ではホストDNSでDockerが使えない原因とその解決策を紹介します。
理由
Docker は、Cgroup や Namespace などのテクノロジーを使用して、コンテナ内のホストから完全に分離された環境を提供します。この分離環境はコンテナを保護しますが、コンテナがホストの DNS サーバーを介して通信することも防ぎます。したがって、コンテナー内のドメイン名解決にホスト DNS サービスを使用することはできません。
解決策
ホスト DNS で Docker を使用できない問題を解決するには、次の措置を講じることができます:
1. カスタム DNS サーバーをセットアップするDocker コンテナ内
Docker でカスタム DNS サーバーをセットアップして、デフォルトの DNS サーバーを置き換えることができます。 Dockerfile で次のコマンドを使用して、カスタム DNS サーバーをセットアップできます。
RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf
これにより、Google のパブリック DNS サーバー 8.8.8.8 がコンテナ内の /etc/resolv.conf ファイルに追加されます。複数のネームサーバーを追加することで、複数の DNS サーバーをセットアップできます。
2. ホスト マシンに Docker の DNS サーバーをセットアップする
コンテナがホスト マシンを介してドメイン名解決を実行できるように、ホスト マシンに Docker の DNS サーバーをセットアップできます。 /etc/docker/daemon.json ファイルに次の構成を追加することで、Docker DNS サーバーをセットアップできます:
{ "dns": ["8.8.8.8", "8.8.4.4"] }
これにより、Google のパブリック DNS サーバー 8.8.8.8 および 8.8.4.4 が Docker DNS に追加されます。サーバー中間。複数の DNS サーバーを追加することで、複数の DNS サーバーをセットアップできます。
3. Docker コンテナの --dns オプションを使用する
Docker コンテナの起動時に --dns オプションを使用して、コンテナの DNS サーバーを設定できます。例:
docker run --dns 8.8.8.8 -it ubuntu:latest
これにより、Google のパブリック DNS サーバー 8.8.8.8 がコンテナの DNS サーバーとして設定されます。
概要
Docker はコンテナ内に隔離された環境を提供するためにいくつかのテクノロジーを使用するため、ホスト DNS では使用できません。この問題を解決するには、Docker コンテナにカスタム DNS サーバーを設定するか、ホストに Docker の DNS サーバーを設定するか、Docker コンテナの --dns オプションを使用してコンテナの DNS サーバーを設定します。これらのソリューションにより、Docker がホスト DNS と連携して、Docker コンテナ化プラットフォームをより効果的に使用できるようになります。
以上がDockerがホストDNSと通信できない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。