web-dev-qa-db-ja.com

Ubuntu Gnome 15.10でネットワークDockerをクリーンにセットアップする方法

Ubuntu Gnome 15.10では、Dockerはほぼそのまま使用できますが、微妙な点があります。 dockerサービスを再起動するまで、コンテナはネットワークにアクセスできないようです。

ホストの起動後、docker0インターフェースにはIPアドレスがありません。

$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr ea:03:cc:9c:7a:cd
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:108 (108.0 B)

その後、コンテナを起動すると、docker0インターフェースはipv6アドレスのみを取得し、コンテナからのネットワーク接続は不可能です。ホストIP、LAN IP、またはインターネットIPにpingできません。私は、ubuntu:trustyイメージを使用し、bashをコンテナのメインプロセスとして実行しています。

$ ifconfig docker0 
docker0   Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet6 addr: fe80::7801:6eff:fe86:6dd8/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:704 (704.0 B)  TX bytes:3917 (3.9 KB)

Dockerを再起動すると、docker0は(ipv6アドレスに加えて)ipv4アドレスを取得し、すべてが期待どおりに機能します。

$ Sudo service docker restart 
$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::7801:6eff:fe86:6dd8/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:704 (704.0 B)  TX bytes:3917 (3.9 KB)

もちろん、マシンを再起動するたびにdockerサービスを再起動できます。または、起動スクリプトをハッキングして自動化することもできます(試したことはありません)。誰かがこれを修正するcleanの方法を知っていますか?

7
marcv81

TL; DR:「apt-get install docker.io」を使用してDockerをインストールしました。 https://docs.docker.com/installation/ubuntulinux/ の後に最新バージョンをインストールすると、問題が修正されます。

問題を調査した結果、15.10のDockerのバージョンでは、docker0インターフェイスを正しく作成および初期化できません。最初の実行(サービスdockerの開始)でインターフェースを作成しますが、初期化に失敗し、その後の実行(service dockerの再起動)でそれを初期化します。これは、brctlを使用して手動でインターフェイスを手動で追加および削除して再現できます。このバグは最新のDockerで修正されました。

7
marcv81

私にとってそれは台無しにNetworkManagerです。 Dockerサービスは、dbusでブリッジを公開する必要があるため、ブリッジを作成します。 NetworkManagerは、dbusで新しいインターフェイスを確認し、構成を試みます(ブリッジdocker0が既に正常に構成されていることを知るのに十分なバカだからです)。 NetworkManagerは時々docker0の設定(再設定)に成功しますが、失敗することがあります。したがって、ボックスを再起動すると、docker0にIPが割り当てられることもあれば、割り当てられないこともあります。

NetworkManagerの混乱を停止するにはadd

iface docker0 inet manual

/etc/network/interfacesへのNetworkManager.conf

[ifupdown] managed=false

15.10のデフォルトです

(NetworkManagerがdocker固有のインターフェースを台無しにするのを防ぐために、おそらくバグを発生させる必要があります)

2
greg one