2016-07-27 4 views
0

私はCentOSコンテナを2つのネットワークインターフェイスで使用しようとしています。 Dockerのドキュメントと「googleing」を少し調べたところ、これを実現する方法を指定したthis GitHub issue commentが見つかりました。新しいNICをDockerコンテナに特定の順序で追加する

がそれに続いて、私は新しいネットワーク(デフォルトのタイプ:bridge)作成した新しいネットワークを点検

docker network create my-network 

を、私はドッカーは、サブネットワーク172.18.0.0/16とゲートウェイ172.18.0.1/16にそれを割り当てられていることがわかります。コンテナを作成するときに

その後、私は特に新しいネットワークアタッチ:

:コンテナ内

docker create -ti --privileged --net=my-network --mac-address 08:00:AA:AA:AA:FF <imageName> 

を、私は確かにインターフェイスがそのIPアドレスとMACアドレスを持つ存在であることifconfigに確認することができます

eth0  Link encap:Ethernet HWaddr 08:00:AA:AA:AA:FF 
      inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 
      inet6 addr: fe80::a00:aaff:feaa:aaff/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:3 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:258 (258.0 b) TX bytes:258 (258.0 b) 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:65536 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 

私はデフォルトドッカーネットワーク(bridge0別名bridge)にコンテナを接続するときに問題が来る:

docker network connect bridge <my-container> 

今、容器内のインターフェイスを確認する:

eth0  Link encap:Ethernet HWaddr 02:42:AC:11:00:02 
      inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 
      inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:17 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:2941 (2.8 KiB) TX bytes:508 (508.0 b) 

eth1  Link encap:Ethernet HWaddr 08:00:AA:AA:AA:FF 
      inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 
      inet6 addr: fe80::a00:aaff:feaa:aaff/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:17 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:2941 (2.8 KiB) TX bytes:508 (508.0 b) 

インターフェースを私の新しいネットワークのためには、その間、デフォルトのネットワーク用のインタフェースはeth0取得、eth1上に移動します。

DEVICE="eth0" 
BOOTPROTO="dhcp" 
HWADDR="52:54:00:85:11:33" 
IPV6INIT="yes" 
IPV6_AUTOCONF="yes" 
MTU="1500" 
NM_CONTROLLED="yes" 
ONBOOT="yes" 
TYPE="Ethernet" 
UUID="25016937-1ff9-40d7-b4c3-18e08af0f98d" 
:インタフェース( /etc/sysconfig/network-scripts/ifcfg-eth0)用の設定ファイルをチェックする際にも

、私はコンテナ(08:00:AA:AA:AA:FF)を実行しているとき、私は手動で設定1からそこは異なりMACアドレスが指定されていることがわかります

/etc/sysconfig/network-scriptsには、eth0の設定ファイルのみがあります。 eth1(新しく追加されたインターフェイス)のファイルがありません。

私が関与している作業の要件のため、最初のインターフェイスを常に無効にする必要があり、そのMACアドレスを特別に設定する必要があります。

その他のネットワーク関連の作業はすべて、新しい接続NICを経由する必要があります。

私の質問は:私はコンテナに新しいNICを添付することができますどのように

がそうeth0が必要なMACアドレスを持つことになります。

イメージレベルでこれを行うこともできます。

答えて

1

目的は、2つのNIC(eth0およびeth1)を持つ実行中のコンテナを持つことです。

eth0は特定のMACアドレスを持っています(これはAA:AA:AA:AA:AA:AAとしましょう)、無効になります。すべてのネットワーキングはeth1によって行われます。

私はドッカーイメージがifdownおよび/またはifconfig

eth0を実行するための権限を持つユーザーが既に画像とデフォルトドッカーのnetworへの「交渉」に存在していることを前提としています:bridge( Dockerのインストール時に作成されます)。

イメージ内のeth0の設定ファイル(/etc/sysconfig/network-scripts/ifcg-eth0)を変更して、そのMACアドレスを変更する必要があります。このフィールドはファイル内でHWADDRというフィールドです。

この後、私たちはコミット新しい画像に変更する必要があります。 myImageとしましょう。

は今、私たちは、第2のインタフェースのための新しいネットワークを作成する必要があります。デフォルトでは

docker network create myNetwork 

それは(私の場合は十分です)bridgeネットワークです。

eth0にカスタムMACアドレスを設定する必要があるため、ネットワークを指定せずにコンテナを作成する必要があります。デフォルトのブリッジネットワークに接続します。

docker create -ti --mac-address=AA:AA:AA:AA:AA:AA --privileged --hostname=myHostnane --name=myContainer myImage 

我々がeth0インタフェースを降ろすことができるようにスイッチを--privileged とコンテナを作成することが重要です。

さて、コンテナを開始する前に、我々は新しいネットワークに接続する:bridgeネットワークと新しいeth1myNetworkのためのネットワークのためのオリジナルeth0

docker network connect myNetwork myContainer 

今の容器は2つのインタフェースを有しています。

この時点で、我々はコンテナ起動することができます。

docker start myContainer 

をしてからeth0をテイクダウンするために実行します。インターフェイスをダウンさせる

docker exec myContainer /bin/bash -c "sudo ifdown eth0" 

、我々はこれを行う必要があります実行時コンテナ。その理由は、ネットワーキングファイルwill only persist in its running containerが変更されたため、ダウンインターフェイスをコミットすることはできません。

関連する問題