2016-07-27 6 views
0

두 개의 네트워크 인터페이스가있는 CentOS 컨테이너가 있습니다. Docker 문서와 "googleing"을 조금 읽은 후이를 달성하는 방법을 지정하는 this GitHub issue comment을 발견했습니다.Docker 컨테이너에 새 NIC 추가 특정 순서로

그것을 다음, 나는 새로운 네트워크 (기본 유형 : 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)에 대한 구성 파일을 점검 할 때 또한

, I는 컨테이너 (08:00:AA:AA:AA:FF)을 실행할 때 수동으로 설정된 하나가 다르다 MAC 주소가 지정된 것을 알 수있다

/etc/sysconfig/network-scripts에는 eth0에 대한 구성 파일 만 있습니다. eth1 (새로 추가 된 인터페이스)의 파일이 누락되었습니다.

내가 참여하고있는 작업의 요구 때문에 첫 번째 인터페이스가 항상 비활성화되어야하고 MAC 주소가 구체적으로 설정되어야합니다.

기타 네트워크 관련 작업은 새로 연결된 NIC를 통과해야합니다.

내 질문은 : 나는 용기에 새 NIC를 연결할 수있는 방법

그래서 eth0 원하는 MAC 주소가됩니다.

이미지 수준에서이 작업을 수행하는 것도 좋습니다.

답변

1

목표는 두 개의 NIC가있는 실행 컨테이너 인 eth0eth1입니다.

eth0에는 특정 MAC 주소 (예 : AA:AA:AA:AA:AA:AA)가 있으며 사용 중지됩니다. 모든 네트워킹은 eth1을 통해 이루어집니다.

나는 도커 이미지 ifdown 및/또는

eth0 이미 이미지에 존재 ifconfig 기본 부두 노동자의 networ에 "대화"를 실행할 수있는 권한이있는 사용자가 있다고 가정합니다 : bridge를 (Docker 설치시 생성됨).

이미지에서 eth0의 구성 파일 (/etc/sysconfig/network-scripts/ifcg-eth0)을 수정하여 해당 MAC 주소 (파일에서 HWADDR이라는 필드)를 수정해야합니다.

이 후 우리는 커밋 새 이미지를 변경해야합니다. myImage으로 부르 자.

지금, 우리는 두 번째 인터페이스의 새로운 네트워크를 만들 필요가 기본적으로

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 네트워크에 대한 원래의 eth0myNetwork 네트워크에 대한 새로운 eth1 :

docker network connect myNetwork myContainer 

지금 컨테이너는 두 개의 인터페이스를 가지고 있습니다.

이 시점에서

, 우리는 용기 시작할 수 있습니다

docker start myContainer 

을 다음 eth0을 취할 수있는 위해 실행 :

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

인터페이스를 활용하려면, 우리는이 작업을 수행해야합니다 컨테이너를 실행하는 경우. 그 이유는 네트워킹 파일의 모든 변경 사항이 will only persist in its running container이므로 다운 인터페이스를 커밋 할 수는 없기 때문입니다.

관련 문제