2015-11-14 5 views
5

何らかの理由でDockerがDockerhubと通信できません。 searchおよびpullコマンドはDNS関連の理由で失敗します。例:Dockerプルが127.0.1.1:53のindex.docker.ioを検索できません(DNSメッセージを非マーシャルできません)

$ docker pull redis 
Pulling repository redis 
Get https://index.docker.io/v1/repositories/library/redis/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: cannot unmarshal DNS message 

私のインターネット接続は問題ありません。私はping 127.0.1.1することができます。それはローカルホストのアドレスですか?マシン上で壊れているDockerhub固有のDNSサービスが実行されていますか?私のネットワークには何も間違っているようです。

GoogleのDNS(8.8.8.8)を使用するようにネットワーク接続を設定しようとしましたが、違いはありません。私は、ブラウザでそこに移動しようとした場合

更新

不思議なことに、私はピングindex.docker.io、しかし、私はhub.docker.comにリダイレクトすることはできません。

更新

私は今、これが唯一のホテルで、1 LAN上で起こっていることを確認することができます。私は彼らが何をしているのか、GitやBittorrentや他の接続されたツールではなく、Dockerにしか影響しない理由を知らない。

+0

インターネットに接続するためのプロキシがありますか? – VonC

+0

私は8.8.8.8でGoogleのDNSを使用していましたが、既に無効にしてみました。私は大きなホテルにいるので、交通に奇妙なことをしても驚かないだろう。 –

+0

あなたのドッカーセッションにはLinuxホストを直接使用していますか、またはWindowsまたはMacを搭載したLinux VMは使用していますか? – VonC

答えて

3

質問は少し古くなっていますが、未回答のまま残っているので、私はそれにつまずいてしまいました。

宿泊していたホテルのローカルネットワークは、Dockerによって作成された仮想ネットワークとネットワークアドレスが衝突している可能性があります。私は企業ネットワークで同じ種類のものを発行しました。

最も簡単な(しかしそれほどよく文書化されていない)修正は、Dockerが '--bip'パラメータを使用して仮想LANに任意のネットワークアドレスを使用させることです。 Linuxでは/ etcにあるDockerの設定を編集するのが普通ですが、Mac上では(ちょうど誰かがこの問題を抱えている場合など)特に変更するファイルが見つからない場合があります。この場合はhttps://github.com/docker/docker/issues/25064をよく読んでください。

基本的には、接続しているネットワークで使用されていないネットワークセグメントを見つける必要があります。 Dockerはデフォルトでこれを実行しようとします:あなたのネットワークインターフェイスと衝突しない最初のプライベートCIDRが使用されます。しかし、別のプライベートセグメントを経由してプライベートLANセグメントを経由している場合、Dockerはそれを見ることができず、クラッシュするCIDRを持つローカルネットワークを作成し、パケットのルーティングを防ぎます。

の例では、明確化のために:

あなたのIPアドレスは、/ 24のネットマスクで192.168.10.2である可能性があります。このネットワークのデフォルトゲートウェイは192.168.10.1/24ですが、そのゲートウェイはアドレス172.17.1.1の別のルータを経由してルーティングします。

Dockerは192.168.10.0/24が使用中であることに気付き、172.16.0.0/16のアドレスを持つ仮想ネットワークを作成します。そのため、コンテナはそのCIDRの下にあるすべてのアドレスをローカルにルーティングしようとします。 172.17.1.1外部ルータ。そのような場合、--bipを10.0.0.1/16という別のものに変更したいとします。これにより、パケットが適切にルーティングされます。