답변:
의 주석 DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
에 /etc/default/docker
로 매트 캐리어가 제안하는 것은 않았다 NOT 나를 위해 작동합니다. 또한 회사의 DNS 서버를 해당 파일에 넣지 않았습니다. 그러나 다른 방법이 있습니다 (계속 읽으십시오).
먼저 문제를 확인하겠습니다.
$ docker run --rm busybox nslookup google.com # takes a long time
nslookup: can't resolve 'google.com' # <--- appears after a long time
Server: 8.8.8.8
Address 1: 8.8.8.8
명령이 중단 된 것처럼 보이지만 결국 " 'google.com'을 해결할 수 없습니다."라는 오류가 나오면 저와 같은 문제가있는 것입니다.
이 nslookup
명령은 'google.com'의 텍스트 주소를 IP 주소로 바꾸기 위해 DNS 서버 8.8.8.8을 쿼리합니다. 아이러니하게도 8.8.8.8은 Google의 공개 DNS 서버 입니다. 경우 nslookup
실패 8.8.8.8 같은 공공 DNS 서버는 귀하의 회사에 의해 차단 될 수 있습니다 (I 보안상의 이유로 가정).
당신은 당신의 회사의 DNS 서버를 추가하는 것을 생각할 것 DOCKER_OPTS
에서하는 /etc/default/docker
트릭을 할해야하지만, 어떤 이유, 그것은 나를 위해 일을하지 않았다. 나는 아래에서 나를 위해 일한 것을 설명합니다.
해결책 :
호스트 (Ubuntu 16.04를 사용하고 있음)에서 기본 및 보조 DNS 서버 주소를 찾습니다.
$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 10.0.0.2
IP4.DNS[2]: 10.0.0.3
이 주소를 사용하여 파일을 만듭니다 /etc/docker/daemon.json
.
$ sudo su root
# cd /etc/docker
# touch daemon.json
이것을 넣으십시오 /etc/docker/daemon.json
:
{
"dns": ["10.0.0.2", "10.0.0.3"]
}
루트에서 종료 :
# exit
이제 docker를 다시 시작하십시오.
$ sudo service docker restart
확인 :
이제 /etc/docker/daemon.json
파일 을 추가하면 'google.com'을 IP 주소로 확인할 수 있는지 확인합니다 .
$ docker run --rm busybox nslookup google.com
Server: 10.0.0.2
Address 1: 10.0.0.2
Name: google.com
Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net
Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net
참조 :
저는 솔루션에 대한 모든 공로를 인정받을 자격이있는 Robin Winslow의 기사를 기반으로 솔루션을 기반으로했습니다. 고마워, 로빈!
"Docker의 네트워킹 DNS 구성 수정." 로빈 윈 슬로우. 2016 년 11 월 9 일에 확인 함. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
nslookup google.com 8.8.8.8
. 제 경우에는이 오류가 발생했습니다connection timed out; no servers could be reached
/etc/default/docker
일부 사람들에게 효과가 없었던 이유 는 (파일에서 주석을 인용)# THIS FILE DOES NOT APPLY TO SYSTEMD
많은 두통 끝에 나는 답을 찾았습니다. Could not resolve 'archive.ubuntu.com'
다음과 같이 변경하여 수정할 수 있습니다.
다음 줄의 주석 처리를 제거하십시오. /etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Docker 서비스 다시 시작
sudo service docker restart
잘못된 DNS 설정을 캐시 한 이미지를 삭제하십시오.
크레딧은 Andrew SB 에게갑니다.
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
지만 다른 일이 없었던 것 같습니다.
같은 문제가 발생하지만 / etc / default / docker dns 항목의 주석 처리를 제거 하거나 빌드 컨테이너에서 /etc/resolv.conf 를 편집 하거나 /etc/docker/daemon.json 이 도움이됩니다.
하지만 --network = host 옵션을 사용하여 빌드 한 후 다시 해결되었습니다.
docker build --network=host -t my-own-ubuntu-like-image .
아마도 이것은 누군가를 다시 도울 것입니다.
Matt Carrier의 답변 이이 문제에 대한 올바른 해결책 이라고 생각합니다 . 그러나 구현 한 후에도 동일한 동작을 관찰했습니다 could not resolve 'archive.ubuntu.com'
..
이로 인해 결국 연결된 네트워크가 공용 DNS를 차단하고 있음을 알게되었습니다. 이 문제에 대한 해결책은 내 호스트 (Docker를 실행하는 시스템)가 사용하는 것과 동일한 이름 서버를 사용하도록 Docker 컨테이너를 구성하는 것이 었습니다.
분류 방법 :
docker run -it docker/whalesay bash
ping 172.217.4.238
(google.com)ping google.com
제 경우에는 첫 번째 ping
는 응답을, 두 번째는 그렇지 않았습니다.
수정 방법 :
DNS가 컨테이너 내부에서 작동하지 않는다는 사실을 알게되자 호스트에서 동일한 동작을 복제 할 수 있는지 확인했습니다. nslookup google.com
호스트에서 잘 해결되었습니다. 그러나, nslookup google.com 8.8.8.8
또는 nsloookup google.com 8.8.4.4
시간이 초과되었습니다.
다음으로 nm-tool
(Ubuntu 14.04에서) 실행하여 호스트가 사용하고있는 이름 서버를 찾았습니다 . 빠른 피드백의 맥락에서 예제 이미지를 다시 시작하고 컨테이너의 resolv.conf 파일에 이름 서버의 IP 주소를 추가했습니다 sudo vi /etc/resolv.conf
.. 일단 저장되면 다시 핑 ( ping google.com
)을 시도했고 이번에는 작동했습니다!
컨테이너의 resolv.conf에 대한 변경 사항은 영구적이지 않으며 컨테이너를 다시 시작하면 손실됩니다. 필자의 경우 더 적절한 해결책은 네트워크 이름 서버의 IP 주소를 호스트 /etc/default/docker
파일 에 추가하는 것이 었습니다 .
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) 및 nmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). 신용 : Marty Fried .
로컬 dns ip를 기본 도커 파일에 추가하면 저를 위해 작동하기 시작했습니다 ... 아래 단계를 찾으십시오 ...
$ nm-tool # (will give you the dns IP)
DNS : 172.168.7.2
$ vim /etc/default/docker # (uncomment the DOCKER_OPTS and add DNS IP)
DOCKER_OPTS="--dns 172.168.7.2 --dns 8.8.8.8 --dns 8.8.4.4"
$ rm `docker ps --no-trunc -aq` # (remove all the containers to avoid DNS cache)
$ docker rmi $(docker images -q) # (remove all the images)
$ service docker restart #(restart the docker to pick up dns setting)
이제 Docker를 빌드하십시오 ... :)
이 문제가있는 사람을 위해 /etc/default/docker
다른 답변과 질문에서 제안한대로 파일 을 편집하여 문제를 해결했습니다 . 그러나 나는 DNS로 사용할 IP를 몰랐습니다.
ifconfig docker
도커 네트워크 인터페이스에 대한 IP를 표시하기 위해 호스트에서 실행해야한다는 사실을 알게 된 것은 잠시 후였습니다 .
docker0 Link encap:Ethernet Endereço de HW 02:42:69:ba:b4:07
inet end.: 172.17.0.1 Bcast:0.0.0.0 Masc:255.255.0.0
endereço inet6: fe80::42:69ff:feba:b407/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:8433 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:9876 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:0
RX bytes:484195 (484.1 KB) TX bytes:24564528 (24.5 MB)
그것은이었다 172.17.0.1
내 경우. 이 문제가있는 모든 사람에게 도움이되기를 바랍니다.
ifconfig docker0
나는 구글링 후에이 대답 을 찾았다. Windows를 사용하고 있으므로 위의 답변 중 일부가 내 파일 시스템에 적용되지 않았습니다.
기본적으로 실행 :
docker-machine ssh default
echo "nameserver 8.8.8.8" > /etc/resolv.conf
8.8.8.8
내가 믿고 사용하는 기존 네임 서버를 덮어 씁니다 . 그것은 나를 위해 일했습니다!
일부 의견에 따르면 루트 여야 할 수도 있습니다. 그렇게하려면 sudo -i
.
ssh
존재하지 않기 때문에 Windows 10에서 작동하지 않았습니다.
sudo -i
가 된
검색 엔진에서이 문제를 접하는 모든 사람에게 늦은 응답을 추가하고 싶었습니다.
이 작업을 수행하지 마십시오. / etc / default / docker에를 설정하는 옵션이있었습니다 iptables=false
. 이 UFW 일을하지 않았기 때문에 (모든 비록 단지 3 포트가 허용되었다 연) 나는 맹목적으로이 질문에 대한 대답은 다음 있도록했다 : 불완전 방화벽 (UFW)를 도커를 사용할 때 아무것도 차단하지 및 에 링크 된이, 코멘트
나는 일반적으로 iptables 규칙 / nat / 라우팅에 대한 이해가 매우 낮기 때문에 왜 비합리적인 일을했을 수 있습니다.
내가 잘못 구성하고 컨테이너 내부의 DNS 확인을 죽인 것으로 밝혀졌습니다. 대화 형 컨테이너 터미널을 실행할 때 :docker run -i -t ubuntu:14.04 /bin/bash
나는 다음과 같은 결과를 얻었다.
root@6b0d832700db:/# ping google.com
ping: unknown host google.com
root@6b0d832700db:/# cat /etc/resolv.conf
search online.net
nameserver 8.8.8.8
nameserver 8.8.4.4
root@6b0d832700db:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.76 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.72 ms
모든 ufw 구성 (before.rules)을 되돌리고 ufw를 비활성화하고 / etc / default / docker에서 iptables = false를 제거하면 컨테이너의 DNS 확인 기능이 복원되었습니다.
대신 이 지침 에 따라 ufw 기능을 다시 활성화 할 수 있기를 기대합니다 .
나에게 같은 문제 (Ubuntu Xenial에서).
docker run --dns ...
컨테이너가 작동했습니다. docker build
(docker-compose 등)에 대한 도커 데몬 옵션 업데이트 가 작동하지 않았습니다.도커 로그 ( journalctl -u docker.service
)를 분석 한 후 잘못된 resolvconf에 대한 경고가 적용된 경우.
그 후 회사 이름 서버가 네트워크 인터페이스에 추가되었지만 resolvconf에는 추가되지 않았습니다.
이 솔루션 적용 인터페이스에서 정적 DNS를 어떻게 구성합니까? (askubuntu) , 즉 네임 서버 추가/etc/resolvconf/resolv.conf.d/tail
resolvconf를 업데이트 한 후 (또는 재부팅).
bash
docker run --rm busybox nslookup google.com
즉시 일했습니다.
내 모든 docker-compose 빌드가 이제 작동합니다.
나는 이것으로 얼마 동안 어려움을 겪었지만 여기에서 나를 위해 그것을 해결했습니다 Ubuntu 16.04 x64
. 누군가의 시간도 절약되기를 바랍니다.
In /etc/NetworkManager/NetworkManager.conf
: 주석 처리
#dns=dnsmasq
생성 (또는 수정) /etc/docker/daemon.json
:
{
"dns": ["8.8.8.8"]
}
sudo service docker restart
내 시스템 ( macOS High Sierra 10.13.6
와 함께 Docker 2.1.0.1
)에서 이것은 회사 프록시 때문이었습니다.
나는 이것을 두 단계로 해결했다.
Preferences>Proxies
다음 ~/.docker/config.json
과 같이 config.json에 동일한 설정을 추가하십시오 .
"proxies":
{
"default":
{
"httpProxy": "MYPROXY",
"httpsProxy": "MYPROXY",
"noProxy": "MYPROXYWHITELIST"
}
}
newgrp docker
전체 로그 오프를 수행하는 대신 발행 한 다음 나 자신을 부여한 후 로그인하는 경우에만 새로운도 커가 설치된 Linux 랩톱에서 발생 하는 것을 보았습니다sudo usermod -aG docker myuserid
... 그러나 그것은 발생합니다