web-dev-qa-db-ja.com

--net = Hostパラメーターがないと、Dockerコンテナー内でネットワークに到達できません

問題:Dockerコンテナにインターネット接続がありません。

症状:ping 8.8.8.8が機能しません。ホストシステムのWiresharkは以下を返します。

 19 10.866212113   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=0/0, ttl=64
 20 11.867231972   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=1/256, ttl=64
 21 12.868331353   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=2/512, ttl=64
 22 13.869400083   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=3/768, ttl=64

しかし!コンテナが--net=Hostで開始された場合、インターネットは完全に機能します。

これまでに試したこと:

  • DNSの変更
  • --ip-masq=true/etc/default/dockerに追加(再起動はオフ)
  • マスカレード/ ip_forwardに関連するすべてを有効にする
  • デフォルトルートの変更
  • すべての提案 ここ

ホスト構成:

$ Sudo route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.4.2.1      0.0.0.0         UG    0      0        0 eno1.3001
default         10.3.2.1      0.0.0.0         UG    100    0        0 eno2
10.3.2.0      *               255.255.254.0   U     100    0        0 eno2
10.4.2.0      *               255.255.254.0   U     0      0        0 eno1.3001
nerv8.i         10.3.2.1      255.255.255.255 UGH   100    0        0 eno2
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0

Sudo iptables -Lcat /etc/network/interfacesifconfigiptables -t nat -L -nv

すべてが問題なく、転送も有効になっています。

$ Sudo sysctl net.ipv4.ip_forward 
net.ipv4.ip_forward = 1
14

これはあなたが探している完全な答えではありません。しかし、インターネットが機能している理由について少し説明したいと思います

コンテナが--net = Hostで開始された場合、インターネットは完全に機能します。

Dockerはデフォルトで3つのネットワークをサポートしますこのモードでは、(ホスト)コンテナがホストのネットワークスタックを共有し、ホストからのすべてのインターフェースがコンテナで使用可能になります。コンテナのホスト名はホストシステムのホスト名と一致します

# docker run -it --net=Host ubuntu:14.04 /bin/bash
root@labadmin-VirtualBox:/# hostname
labadmin-VirtualBox
Even the IP configuration is same as the Host system's IP configuration
root@labadmin-VirtualBox:/# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
root@labadmin-VirtualBox:/# exit
exit

ホストシステムIP構成

# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 

これを参照 Dockerネットワーキングの詳細については。

5
Here_2_learn

「Sudo ifconfig」を実行して、インターネット接続のIPの範囲(通常はwlan0)がdocker0インターフェイス172.17.0.0の範囲と衝突していないかどうかを確認できますか?

172.17.0.Xで動作し、Dockerがその範囲を正確に選択しようとする(自宅で正常に動作していた)オフィスネットワークにこの問題がありました。

これは助けになるかもしれません: http://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/

結局、Docker用の独自のブリッジネットワークを作成することになりました。

0
Laszlo Fogas

net.ipv4.conf.all.forwardingnet.ipv4.ip_forwardではない)が1に設定されていることを確認します。設定されていない場合は、オンにします。

$ sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 0

$ sysctl net.ipv4.conf.all.forwarding=1

$ sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 1
0
Camilo Silva