회사 네트워크에서 Docker 이미지를 빌드하는 데 문제가 있습니다. 방금 Docker를 시작하고 있으므로 hello-world 유형 앱에 대해 다음 Dockerfile이 있습니다.
# DOCKER-VERSION 0.3.4
FROM centos:6.4
# Enable EPEL for Node.js
RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN yum install -y npm
# Bundle app source
ADD . /src
# Install app dependencies
RUN cd /src; npm install
EXPOSE 8080
CMD ["node", "/src/index.js"]
이것은 가정의 랩톱, 내 무선 네트워크에 구축 할 때 잘 작동합니다. 필수 종속성을 가져와 이미지를 올바르게 빌드합니다.
그러나 회사 네트워크에있을 때 download.fedoraproject.org에서 RPM을 가져 오려고 할 때 다음과 같은 오류 메시지와 함께 동일한 도커 빌드가 실패합니다.
2 단계 : rpm
실행 -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm —> e0c26afe9ed5 curl에서 실행 : (5) couldn ‘ t 프록시 ‘some.proxy.address’오류 해결 : http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm 건너 뛰기 -전송 실패
회사 네트워크에서는 랩톱에서 해당 URL에 제대로 액세스 할 수 있습니다. 그러나 Docker가 컨테이너를 빌드하려고 시도하면 갑자기 전혀 해결할 수 없습니다. 이 동작은 다양한 외부 리소스 (apt-get 등)에 대해 동일합니다. 모두 회사 네트워크의 랩톱에서 잘 해결할 수 있지만 Docker는 해결할 수 없습니다.
나는 여기서 무슨 일이 일어나고 있는지 알아낼 네트워크 노하우가 없습니다. Docker 컨테이너를 빌드 할 때이 이상한 동작이 발생하는 이유를 아는 사람이 있습니까?
답변
문제를 파악할 수있었습니다. Ubuntu에서 Docker는 컨테이너의 DNS 서버를 8.8.8.x의 Google 서버로 설정합니다. 내가 이해하는 것처럼 이것은 Ubuntu가 /etc/resolv.conf를 127.0.0.1로 설정한다는 사실로 인해 Ubuntu의 해결 방법입니다.
이러한 Google 서버는 방화벽 뒤에서 액세스 할 수 없었기 때문에 URL을 확인할 수 없었습니다.
해결 방법은 Docker에게 사용할 DNS 서버를 알려주는 것입니다. 이 수정 사항은 Docker를 설치 한 방법에 따라 다릅니다.
Ubuntu 패키지
Ubuntu 패키지가 설치되어있는 경우 / etc / default / docker를 편집하고 다음 행을 추가하십시오.
DOCKER_OPTS="--dns <your_dns_server_1> --dns <your_dns_server_2>"
이 구성에 원하는만큼 DNS 서버를 추가 할 수 있습니다. 이 파일을 편집 한 후에는 Docker 서비스를 다시 시작해야합니다.
sudo service docker restart
바이너리
바이너리 메서드 (즉, 패키지 없음)를 통해 Docker를 설치 한 경우 Docker 데몬을 시작할 때 DNS 서버를 설정합니다.
sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &
답변
Docker 데몬의 DNS 설정을 변경하는 것이 좋습니다. /etc/docker/daemon.json 에서 데몬 구성 파일을 생성하여 docker 데몬의 기본 옵션을 설정할 수 있습니다 . 호스트 컴퓨터에 따라 DNS 서버를 설정합니다. 예를 들어 내 DNS 서버는 10.0.0.2입니다.
{"dns": ["10.0.0.2", "8.8.8.8"] }
그런 다음 Docker 서비스를 다시 시작하면됩니다.
sudo service docker restart
단계별 설명은 여기에서 볼 수 있습니다. Docker의 네트워킹 DNS 구성 수정
답변
다음 단계는 나를 위해 작동합니다 (도커 빌드 및 도커 실행 명령 모두). 내 Linux 버전은 Ubuntu 14.04입니다.
- 다음 명령을 사용하여 DNS를 식별하십시오.
nm 도구 | grep DNS
이 결과 DNS : 192.168.1.1 내 경우
- /etc/default/docker.io에 항목을 만듭니다. 내 현재 항목은 다음과 같습니다.
DOCKER_OPTS = "-dns 8.8.8.8 --dns 8.8.4.4 --dns 192.168.1.1"
- Docker 서비스 다시 시작
sudo 서비스 docker.io 다시 시작
답변
SystemD (Ubuntu 16, RHEL 7 …)로 작동하는 Linux 배포의 경우 다음 명령을 사용하여 경로가 표시됩니다.
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2016-06-29 08:10:33 PDT; 2min 34s ago
Docs: https://docs.docker.com
Main PID: 1169 (dockerd)
Tasks: 19
Memory: 85.0M
CPU: 1.779s
CGroup: /system.slice/docker.service
├─1169 /usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4 -H fd://
└─1232 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --met
경로는입니다 /lib/systemd/system/docker.service
. 데몬이 시작되는 줄에를 DOCKER_OPTS
포함 할 수 있는 값을 추가합니다 --dns
.
cat /lib/systemd/system/docker.service | grep dns
ExecStart=/usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4 -H fd://
답변
답변
Docker 데몬에 DNS를 지정합니다.
먼저 DNS 주소를 얻으십시오.
$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 10.0.0.2
이 새로운 DNS를 강제하는 도커 컨테이너를 시작하여 문제가 실제로 DNS에 있는지 테스트하십시오.
$ docker run --dns 10.0.0.2 <image_name> <command_name>
이 방법으로 문제가 해결되면 다음과 같은 방법으로 모든 도커 데몬에이 수정 사항을 적용 할 수 있습니다.
/etc/docker/daemon.json 파일 편집 또는 생성
이 파일에 다음 줄을 추가하십시오.
{
"dns": ["10.0.0.2", "8.8.8.8"]
}
Docker 다시 시작
$ sudo service docker restart
이 모든 과정을 수행하기위한 아주 좋은 가이드는 여기에서 찾을 수 있습니다.
https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
답변
Docker 서비스를 다시 시작하지 않는 솔루션
at 빌드 타임 docker build
을 재정 의하여 다른 호출에 영향을주지 않고 (Docker 서비스를 다시 시작 하지 않고) 단일 Docker 이미지에 대한 DNS 설정을 수정할 resolv.conf
수 있습니다.
FROM ubuntu:18.04
RUN echo "nameserver 123.123.123.123" > /etc/resolv.conf && apt update
IP 123.123.123.123
를 회사 네트워크 내에서 사용되는 IP 로 바꿉니다 ( nmcli dev show | grep 'IP4.DNS'
현재 사용되는 DNS 서버를 가져 오는 데 사용).
단점 :
- 이것은 Dockerfile의 다른 행에는 영향을주지 않습니다. 따라서 DNS 확인에 따라 달라지는 경우 수정 사항을 모든 줄에 접두사로 붙여야합니다.