답변:
의 주석 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 bashping 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... 그러나 그것은 발생합니다