1. ホーム
  2. dns

[解決済み] 企業ネットワークでイメージ構築中にネットワーク通話に失敗する

2023-06-08 02:37:44

質問

企業ネットワーク上でDockerイメージを構築するのに問題があります。私はDockerを使い始めたばかりで、hello-worldタイプのアプリ用に以下のDockerfileを持っています。

# DOCKER-VERSION 0.3.4
FROM    centos:6.4
# Enable EPEL for Node.js
RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN     yum install -y npm
# Bundle app source
ADD . /src
# Install app dependencies
RUN cd /src; npm install
EXPOSE  8080
CMD ["node", "/src/index.js"]

これは、自宅のラップトップで、自分のワイヤレスネットワーク上でビルドすると、うまくいきます。必要な依存関係をプルダウンして、イメージを正しくビルドします。

しかし、職場の企業ネットワーク上にいるとき、この同じ docker ビルドが download.fedoraproject.org から RPM を取り込もうとすると、このエラーメッセージとともに失敗します。

ステップ2 : RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm ---e0c26afe9ed5 で実行中。 curl (5) プロキシ 'some.proxy.address' を解決できませんでした。 エラー: スキップ http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - 転送に失敗

私の企業ネットワーク上では、私のラップトップからその URL にうまくアクセスできます。しかし、Docker がコンテナーを構築しようとすると、突然、まったく解決できなくなります。この動作は、さまざまな外部リソース (apt-get など) で同じです。それらはすべて、企業ネットワーク上の私のラップトップでは問題なく解決できるのですが、Docker はそれらを解決することができません。

私はここで何が起こっているのかを理解するためのネットワークのノウハウを持っていません。Docker コンテナーを構築する際に、なぜこのような奇妙な動作が発生するのか、どなたかご存知でしょうか。

どうすれば解決できますか?

問題を把握することができました。Ubuntuでは、DockerはコンテナのDNSサーバーを8.8.8.xのGoogleのサーバーに設定します。私の理解では、Ubuntuでは、/etc/resolv.confが127.0.0.1に設定されているので、これは回避策になると思われます。

これらの Google サーバーは、私たちのファイアウォールの後ろからアクセスできず、それがどの URL も解決できなかった理由です。

修正方法は、Docker に使用する DNS サーバーを指定することです。この修正は、Docker をどのようにインストールしたかに依存します。

Ubuntu パッケージ

Ubuntuパッケージをインストールしている場合は、/etc/default/dockerを編集し、以下の行を追加してください。

DOCKER_OPTS="--dns <your_dns_server_1> --dns <your_dns_server_2>"

この設定には、必要な数のDNSサーバを追加することができます。このファイルを編集したら、Dockerサービスを再起動します。

sudo service docker restart

バイナリ

Dockerをバイナリ方式(パッケージなし)でインストールした場合、Dockerデーモン起動時にDNSサーバを設定します。

sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &