호스트와 동일한 LAN에서 주소 지정이 필요한 많은 도커 컨테이너가 있습니다. 지금까지 브리지 설정 및 수동으로 IP 할당 및 IP 관리를 통해이 목표를 달성했습니다 . 시작 예제는 다음과 같습니다.
docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
호스트가 /etc/network/interfaces
(우분투)에 정의 된 브릿지를 갖는 경우 :
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
내가 발견 한 이후 농노를 , 나는 DHCP는 IP를 추적 및 컨테이너로 나눠 수 있도록하는 것이, 컨테이너 내에서 자동 검색을 사용하는 동안 이동하는 것을 시도하고있다. 이후 시작 명령을 다음과 같이 변경했습니다.
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/bin/bash
그리고 다리는 :
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
이로 인해 컨테이너가 시작되었지만 IP가 없었습니다. 그런 다음 Fedora로 전화를 걸어 온라인 게시물 에서 조언 을 얻었습니다 dhclient
. 불행히도 이것은 우분투 기반 컨테이너 내에서 작동하지 않습니다.
다음은 다른 조건에서 발생하는 다음 오류 메시지입니다.
-
컨테이너 시작
dhclient
을 활성화하면 실행 됩니다--privileged
.dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
-
sudo dhclient eth0
없을 때 실행--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
-
실행
sudo dhclient
중이거나dhclient
(인터페이스가 지정되지 않았습니다).즉시 반환되며 여전히 IP 또는 네트워크 연결이 없습니다.
IP를 추적하지 않고 여러 호스트에 컨테이너를 배포 할 수 있도록 도커 컨테이너가 호스트와 동일한 서브넷에서 동적 IP를 가져 오도록하려면 어떻게해야합니까?
추가 정보
- 실행
DOCKER_OPTS="-e lxc"
중/etc/default/docker
- 호스트는 우분투 14.04입니다
- Docker 컨테이너는
from ubuntu:14.04
Dockerfile에서 사용 합니다.
답변
이 문제는 공개 된 문제 이며 우분투 컨테이너 및 의류에만 해당됩니다.
bprodoehl에서 해결 방법이 게시되었습니다.
- 권한으로 컨테이너를 시작하십시오.
--privileged
- dockerfile에 다음 줄을 추가하십시오.
RUN mv /sbin/dhclient /usr/sbin/dhclient
- 실행
dhclient eth0
하면 여전히 다음과 같은 오류 메시지가 표시됩니다.mv: cannot move '/etc/resolv.conf.dhclient-new.29' to '/etc/resolv.conf': Device or resource busy
그러나 이제 IP가 생성되어 네트워크를 사용할 수 있습니다.
답변
스크립트를 찾았습니다
https://github.com/jkrauska/tech-notes/blob/master/docker-dhclient.md
정확히 원하는 것을 수행합니다 (Programster가 언급 한 해결 방법).
mv 명령은 특권 모드에서 도커 컨테이너를 실행할 때도 커가 컨테이너에 대한 AppArmor 프로파일을 정의하지 않기 때문에 필요합니다. 따라서 시스템 기본 AppArmor 프로파일이 사용되며 기본 경로에서 dhclient를 실행할 수 없습니다.
답변
우분투 도커 컨테이너에서 dhcp 주소를 얻으려면 다음을 수행하십시오.
- docker daemon 명령에서 dns 옵션 설정 (
--dns <my_dns_ip>
) - 단어
/etc/dhcp/dhclient.conf
를 포함request subnet-mask, broadcast-address...
하고 제거하는 줄을 열고 편집하십시오domain-name, domain-name-servers
- 그런 다음 적용
service networking restart
하면 오류 메시지없이 새로운 DHCP 주소가 표시됩니다