問題: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
で開始された場合、インターネットは完全に機能します。
これまでに試したこと:
--ip-masq=true
を/etc/default/docker
に追加(再起動はオフ)ホスト構成:
$ 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 -L
、cat /etc/network/interfaces
、ifconfig
、iptables -t nat -L -nv
すべてが問題なく、転送も有効になっています。
$ Sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
これはあなたが探している完全な答えではありません。しかし、インターネットが機能している理由について少し説明したいと思います
コンテナが--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ネットワーキングの詳細については。
「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用の独自のブリッジネットワークを作成することになりました。
net.ipv4.conf.all.forwarding
(net.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