호스트와 동일한 LAN에서 처리해야 하는 Docker 컨테이너가 많이 있습니다. 지금까지 나는 이것을 사용하여 이것을 달성해 왔습니다.브리지를 설정하고 수동으로 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를 추적할 필요 없이 여러 호스트에 걸쳐 컨테이너를 배포할 수 있도록 Docker 컨테이너가 호스트와 동일한 서브넷에서 동적 IP를 가져오도록 하려면 어떻게 해야 합니까?
추가 정보
DOCKER_OPTS="-e lxc"
달리다/etc/default/docker
- 호스트는 Ubuntu 14.04입니다.
- Docker 컨테이너는
from ubuntu:14.04
Dockerfile을 사용하여 구축됩니다.
답변1
것 같다이것은 공개 질문입니다이는 Ubuntu 컨테이너 및 Apparmor에만 해당됩니다.
bprodoehl은 다음과 같은 해결 방법을 게시했습니다.
- 권한으로 컨테이너 시작
--privileged
- dockerfile에 다음 줄을 추가합니다.
RUN mv /sbin/dhclient /usr/sbin/dhclient
- Run을 실행하면
dhclient eth0
오류 메시지가 계속 표시되지만mv: cannot move '/etc/resolv.conf.dhclient-new.29' to '/etc/resolv.conf': Device or resource busy
이제 IP를 갖게 되며 네트워크를 사용할 수 있습니다.
답변2
스크립트를 찾았어요
https://github.com/jkrauska/tech-notes/blob/master/docker-dhclient.md
이것이 바로 당신이 원하는 것입니다(프로그래머가 언급한 해결 방법).
mv 명령은 권한 있는 모드에서 docker 컨테이너를 실행할 때 docker가 컨테이너에 대한 AppArmor 프로필을 정의하지 않기 때문에 필요합니다. 따라서 시스템의 기본 AppArmor 프로필을 사용하면 기본 경로에서 dhclient를 실행할 수 없습니다.
답변3
우분투 도커 컨테이너에서 dhcp 주소를 얻으려는 경우 다음을 수행하십시오.
--dns <my_dns_ip>
docker 데몬 명령( ) 에서 dns 옵션을 설정합니다.- 해당 단어가 포함된 줄을 열고
/etc/dhcp/dhclient.conf
편집하고request subnet-mask, broadcast-address...
삭제하세요.domain-name, domain-name-servers
- 그런 다음 적용한 후에
service networking restart
는 새 DHCP 주소를 얻게 되며 오류 메시지가 나타나지 않습니다.
답변4
또 다른 가능성은 "파이프"를 사용하는 것입니다. 컨테이너 외부에서 실행해야 합니다.https://github.com/jpetazzo/pipework