resin/rpi-raspbian:jessie
내 컨테이너를 다음과 같이 설정하고 싶습니다 /etc/resolv.conf
.
nameserver 208.67.222.222
nameserver 208.67.220.220
내 Dockerfile에는 다음 줄이 있습니다.
ADD resolv.conf /etc/resolv.conf
이 추가된 파일에는 올바른 이름 서버가 포함되어 있습니다.
내 Docker 호스트에 /etc/resolv.conf
올바른 정보가 포함되어 있습니다.
컨테이너를 다음과 같이 실행합니다.
docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash
그럼에도 불구하고 컨테이너는 다음과 같은 출력을 제공합니다.
root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0
컨테이너 내에서(또는 docker exec를 사용하여) resolv.conf를 수동으로 변경한 후에만 올바르게 보입니다.
문제를 해결하기 위해 exec 명령을 사용하는 것을 피하고 싶습니다. 여기서 무슨 일이 일어나고 있는지 아는 사람 있나요?
답변1
AFAIK, docker가 이미지의 일부 파일을 덮어씁니다.여기 간다, Dockerfile에 추가된 경우에도 마찬가지입니다. 여기에는 확실히 포함되며 /etc/hosts
아마도 같은 일이 일어날 것입니다 /etc/resolv.conf
. 이는 분명히 Docker의 기본 "내부" 네트워크를 올바르게 구축하는 데 사용됩니다(그래서 이미지는 서로 볼 수 있지만 호스트는 볼 수 없음 등).매우 확신하다이러한 파일 중 일부를 덮어쓰거나 수정하려면 런타임 작업의 일부(예: 이 줄의 일부)로 CMD
수행 해야 한다고 생각합니다. 예를 들어:
...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
your_old_commands...
답변2
보시다시피 user-defined networks
Docker 엔진 버전 >= 1.10을 사용하고 있습니다. 따라서 공식 도커 엔진 문서에서 Embedded DNS server in user-defined networks
:
이러한 --dns IP 주소는 내장된 DNS 서버에 의해 관리되며 컨테이너의 /etc/resolv.conf 파일에서 업데이트되지 않습니다.
귀하의 DNS는 작동해야 하지만 어떤 구성 파일에도 표시되지 않습니다.
인용하다.
답변3
Azure에 컨테이너화된 웹 애플리케이션인 경우 이 문제를 해결했습니다.
가지다컨테이너 컴패니언 2개. 쿠두와 마스터
속도
1. docker 파일에서 ssh 설치(sshd 구성도 포함)
2. Containerstart.sh를 생성합니다(resolv.conf를 업데이트합니다).
3. 거기에 진입점을 설정하세요
이제 호스트 resolv.conf가 업데이트되어 원하는 DNS를 사용할 수 있습니다.
추신: 네트워크에서 사용자 지정 DNS를 얻을 수 없더라도 걱정하지 마십시오. 우리도 마찬가지입니다. ASE 환경을 사용하는 경우 재설정해야 할 수도 있습니다.