Ubuntu14.04でDocker version 1.4.1, build 5bc2ff8
を実行しています。コンテナをdocker run
すると、数分後にdocker0
ブリッジが「停止」し、コンテナがネットワークに到達できなくなります。接続が切断される前に、ifconfig
を実行すると、次のようなdocker0
を持つinet addr
デバイスが報告されます。
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[... etc.]
しかし、接続が切断された後、ifconfig
は、ipv4アドレスがなくなったことを示します。
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8116 errors:0 dropped:0 overruns:0 frame:0
TX packets:15995 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2444859 (2.4 MB) TX bytes:17440729 (17.4 MB)
Dockerの再起動(例: Sudo service docker restart
を使用すると、デバイスがバックアップされますが、すべてのコンテナーが停止し、問題が最初からやり直しになります。一度に数分以上実行するものを確実に取得することはできません。ほとんどのプロジェクトでdocker build
を完了するのに十分な長さではありません。
ありがとう!
更新:コンテナをdocker0
で開始し、docker run -t -i ubuntu /bin/bash
で終了するだけで、このctrl-d
ドロップ動作を確実にトリガーできます。そうすると、/var/log/syslog
に表示されるものは次のようになります
myhost kernel: docker0: port 1(veth80ddeaf) entered disabled state
myhost kernel: device veth80ddeaf left promiscuous mode
myhost kernel: docker0: port 1(veth80ddeaf) entered disabled state
'
myhost dhclient: Internet Systems Consortium DHCP Client 4.2.4
myhost dhclient: Copyright 2004-2012 Internet Systems Consortium.
myhost dhclient: All rights reserved.
myhost dhclient: For info, please visit https://www.isc.org/software/dhcp/
myhost dhclient:
myhost dhclient: Listening on LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on Socket/fallback
myhost kernel: IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready
更新#2:失敗の頻度は、コンテナーの実行時間に依存しているようです。例えば:
docker run -i -t ubuntu sleep 0
--> `docker0` "survives" ~100% of the time
docker run -i -t ubuntu sleep 1
--> `docker0` survives ~80% of the time
docker run -i -t ubuntu sleep 5
--> `docker0` survives ~0% of the time
どうすれば診断できますか?
docker0
にIPアドレスがある場合、コンテナを起動しないと、IPアドレスは消えますか?コンテナを起動するまで無期限に存続する場合は、まずDockerログを確認し、コンテナを起動するときにシステムログを追跡します。
IPアドレスは設定された間隔(たとえば、N分ごと)で消えますか?もしそうなら、私はcron
からログを探して、定期的なタスクが原因であるかどうかを確認します。
NetworkManagerを実行していますか? NetworkManagerを無効にすると、問題は解決しますか? NetworkManagerを備えたシステムでDockerを問題なく実行していますが、構成にno-auto-default=*
が設定されているため、この種の問題に影響を与える可能性があります。
更新
これは非常に疑わしいです:
myhost dhclient: Internet Systems Consortium DHCP Client 4.2.4
myhost dhclient: Copyright 2004-2012 Internet Systems Consortium.
myhost dhclient: All rights reserved.
myhost dhclient: For info, please visit https://www.isc.org/software/dhcp/
myhost dhclient:
myhost dhclient: Listening on LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on Socket/fallback
docker0
をリッスンしているdhclient
プロセスがあってはなりません。これが、IPアドレスが消える原因です。このインターフェイスでdhcpクライアントを明示的に実行していない場合、これは、NetworkManagerが実際にこのインターフェイスを管理しようとしていることを示しています。 NetworkManagerを無効にしたとのことですが、プロセスが停止したことを確認しましたか? docker0
をリッスンしているdhclient
の親プロセスは何ですか? dhclient
プロセスを停止すると、再開されますか?問題はなくなりますか?
wcid
サービスが確かに原因のようです。私は設定で見つけました:
(/etc/wicd/manager-settings.conf):wired_interface = docker0
これをeth0
に変更しました。
サービスを再起動するのを忘れましたが、wicd
サービスを停止すると問題が解決しました。上記の変更後、再度開始しましたが、問題はありませんでした。
どうやらwicd
のautoconfigの問題?
ブリッジを再び機能させるには、次を使用できます。
Sudo ip addr add 172.17.0.1/24 dev docker0
ブリッジはIPを取り戻します。
これとまったく同じ問題が発生し、根本的な原因はwicd
でした。ランニング:
Sudo service wicd stop
Sudo service docker restart
...トリックを行う必要があります。