Ubuntu Gnome 15.10에서 네트워크 Docker를 깔끔하게 설정하는 방법

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은 ipv4 주소(ipv6 주소 외에)를 얻고 모든 것이 예상대로 작동합니다.

$ 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)

물론 컴퓨터를 다시 시작할 때마다 도커 서비스를 다시 시작할 수도 있고, 시작 스크립트를 해킹하여 이 작업을 수행할 수도 있습니다(시도해 본 적은 없습니다). 누구 아는 사람 있나요?깨끗한이 문제를 해결하는 방법?

답변1

핵심요약: "apt-get install docker.io"를 사용하여 Docker를 설치했습니다. 다음 최신 버전 설치https://docs.docker.com/installation/ubuntulinux/문제를 해결합니다.

문제를 조사한 결과 15.10의 Docker 버전에서는 docker0 인터페이스를 올바르게 생성하고 초기화할 수 없는 것으로 나타났습니다. 첫 번째 실행(서비스 도커 시작)에서는 인터페이스가 생성되지만 초기화에 실패하고 후속 실행(서비스 도커 다시 시작)에서는 인터페이스가 초기화됩니다. 이는 brctl을 사용하여 수동으로 인터페이스를 추가하고 삭제하는 것을 일관되게 재현할 수 있습니다. 이 버그는 최신 Docker에서 수정되었습니다.

답변2

나에게 그것은 엉망인 NetworkManager입니다. Docker 서비스는 브리지를 생성한 다음 이를 dbus에 노출합니다. NetworkManager는 dbus에서 새 인터페이스를 확인하고 이를 구성하려고 시도합니다(브리지 docker0이 이미 잘 구성되어 있다는 것을 아는 것은 어리석은 일이기 때문입니다). NetworkManager는 때때로 docker0 구성(재구성)에 성공하지만 때로는 실패할 수도 있습니다. 따라서 상자를 재부팅하면 docker0에 IP가 할당되는 경우도 있지만 그렇지 않은 경우도 있습니다.

NetworkManager의 혼란을 막으려면 다음을 추가하세요.

iface docker0 inet manual

가정 /etc/network/interfaces하는 NetworkManager.conf것은

[ifupdown] managed=false

이는 15.10의 기본값입니다.

(NetworkManager가 도커 특정 인터페이스를 엉망으로 만드는 것을 막기 위해 버그가 발생해야 할 수도 있습니다)

관련 정보