web-dev-qa-db-ja.com

Dockerの `docker0`デバイスが繰り返し停止します(` inet addr`が消えます)

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を完了するのに十分な長さではありません。

  1. 何が原因でしょうか?
  2. どうすれば診断できますか?
  3. いくつかの可能な解決策は何ですか?

ありがとう!


更新:コンテナを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
8
Bosh

どうすれば診断できますか?

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プロセスを停止すると、再開されますか?問題はなくなりますか?

3
larsks

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を取り戻します。

2
Vincent Gerris

これとまったく同じ問題が発生し、根本的な原因はwicdでした。ランニング:

Sudo service wicd stop
Sudo service docker restart

...トリックを行う必要があります。

0
Chris Seymour