Docker 컨테이너는 Ubuntu 14.04 Desktop Host에서 DNS를 확인할 수 없습니다. 80] Err http://archive.ubuntu.com trusty-proposed Release.gpg

Ubuntu 14.04 LTS의 Docker 컨테이너에 문제가 있습니다. Docker는 이틀 동안 잘 작동했으며 갑자기 컨테이너 내부의 모든 네트워크 연결이 끊어졌습니다. 아래의 오류 출력은 처음에 apt-get이 IPv6을 통해 DNS를 해결하려고 시도했기 때문이라고 생각합니다.

호스트 컴퓨터에서 IPv6을 비활성화했지만 여전히 모든 이미지를 제거하고 기본 우분투를 가져 와서 여전히 문제가 발생했습니다.

/etc/resolve.conf 네임 서버를 로컬 DNS 서버에서 Google의 퍼블릭 DNS 서버 (8.8.8.8 및 8.8.4.4)로 변경했지만 여전히 운이 없습니다. 또한 / etc / default / docker의 DOCKER_OPTS에서 DNS를 Google로 설정하고 도커를 다시 시작했습니다.

나는 또한 coreos를 당기려고했지만 yum은 DNS를 해결할 수 없었습니다.

DNS가 작동하지 않는 동안 apt-get이 해결할 수없는 동일한 업데이트 서버를 핑할 때 여전히 응답을 받기 때문에 이상합니다.

나는 프록시 뒤에 있지 않고 매우 표준 로컬 네트워크에 있으며이 버전의 Ubuntu는 최신 상태입니다 (이틀 전에 도커에 더 가깝게 설치되었습니다).

나는 stackoverflow 및 github 문제에 대한 다른 게시물을 통해이를 철저히 조사했지만 해결책을 찾지 못했습니다. 이 문제를 해결하는 방법에 대한 아이디어가 없습니다. 아무도 도울 수 있습니까?

에러 메시지

➜  arthouse git:(docker) ✗ docker build --no-cache .
Sending build context to Docker daemon 51.03 MB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
 ---> 5506de2b643b
Step 1 : RUN apt-get update
 ---> Running in 845ae6abd1e0
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty-security InRelease
Err http://archive.ubuntu.com trusty-proposed InRelease
Err http://archive.ubuntu.com trusty Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.

컨테이너 IFCONFIG / PING

➜  code  docker run -it ubuntu /bin/bash
root@7bc182bf87bb:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:04
          inet addr:172.17.0.4  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:738 (738.0 B)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@7bc182bf87bb:/# ping google.com
PING google.com (74.125.226.0) 56(84) bytes of data.
64 bytes from lga15s42-in-f0.1e100.net (74.125.226.0): icmp_seq=1 ttl=56 time=12.3 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 ms
root@7bc182bf87bb:/# 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=44 time=21.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=21.7 ms

또한 IPv4를 강제 실행하면 apt-get 업데이트가 실패합니다.

root@6d925cdf84ad:/# sudo apt-get update -o Acquire::ForceIPv4=true
Err http://archive.ubuntu.com trusty InRelease

Err http://archive.ubuntu.com trusty-updates InRelease

Err http://archive.ubuntu.com trusty-security InRelease

Err http://archive.ubuntu.com trusty-proposed InRelease

Err http://archive.ubuntu.com trusty Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease


답변

우, 내 문제를 해결하는 github에 대한 게시물을 찾았습니다.

Steve K.가 실제로 DNS 문제가 아니며 연결 문제라고 지적한 후 github 에서이 문제를 해결하는 방법을 설명하는 게시물 을 찾을 수있었습니다 .

분명히 docker0 네트워크 브리지가 끊어졌습니다. bridge-utils를 설치하고 다음을 실행하면 Docker가 정상적으로 작동합니다.

apt-get install bridge-utils
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
service docker restart

답변

DNS 확인자 문제인 경우 해결책은 다음과 같습니다.

먼저 확인해야 할 것은 docker 컨테이너cat /etc/resolv.conf 에서 실행 됩니다 . 와 같은 잘못된 DNS 서버가있는 경우 컨테이너는 도메인 이름을 ip 주소로 확인할 수 없으므로 실패합니다.nameserver 127.0.x.xping google.com

두 번째로 확인해야 할 것은 호스트 시스템cat /etc/resolv.conf 에서 실행 됩니다 . Docker는 기본적으로 컨테이너가 시작될 때마다 호스트 를 컨테이너에 복사합니다 . 따라서 호스트 가 잘못되면 도커 컨테이너도 마찬가지입니다./etc/resolv.conf/etc/resolv.conf

호스트 /etc/resolv.conf가 틀렸다는 것을 발견하면 다음 두 가지 옵션이 있습니다.

  1. daemon.json에서 DNS 서버를 하드 코드하십시오. 이것은 쉽지만 DNS 서버가 변경 될 것으로 예상되는 경우에는 이상적이지 않습니다.

  2. 호스트를 수정하십시오 /etc/resolv.conf. 이것은 조금 까다 롭지 만 동적으로 생성되며 DNS 서버를 하드 코딩하지 않습니다.


1. docker daemon.json의 DNS 서버 하드 코드

  • 편집하다 /etc/docker/daemon.json

    {
        "dns": ["10.1.2.3", "8.8.8.8"]
    }
    
  • 변경 사항을 적용하려면 docker 데몬을 다시 시작하십시오.
    sudo systemctl restart docker

  • 이제 컨테이너를 실행 / 시작하면 docker가의 /etc/resolv.conf값으로 채워집니다 daemon.json.


2. 호스트 수정 /etc/resolv.conf

A. 우분투 16.04 및 이전

  • Ubuntu 16.04 이하의 경우 /etc/resolv.confNetworkManager에 의해 동적으로 생성되었습니다.

  • 라인 주석 dns=dnsmasq의 (a와 #)의를 /etc/NetworkManager/NetworkManager.conf

  • NetworkManager를 다시 시작하여 다음을 재생성하십시오 /etc/resolv.conf.
    sudo systemctl restart network-manager

  • 호스트에서 확인하십시오. cat /etc/resolv.conf

B. 우분투 18.04 이상

  • Ubuntu 18.04는를 systemd-resolved생성하는/etc/resolv.conf 데 사용 하도록 변경되었습니다 . 이제 기본적으로 로컬 DNS 캐시 127.0.0.53을 사용합니다. 컨테이너 내부에서는 작동하지 않으므로 Docker는 기본적으로 Google의 8.8.8.8 DNS 서버로 설정되어 방화벽 뒤에있는 사람들에게는 손상 될 수 있습니다.

  • /etc/resolv.conf실제로 Ubuntu 18.04에서 기본적 ls -l /etc/resolv.conf으로 /run/systemd/resolve/stub-resolv.conf(127.0.0.53) 을 가리키는 심볼릭 링크 ( )입니다 .

  • /run/systemd/resolve/resolv.conf실제 DNS 서버를 나열 하도록 심볼릭 링크를 변경하십시오 .
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

  • 호스트에서 확인하십시오. cat /etc/resolv.conf

이제 /etc/resolv.confdocker가 컨테이너에 복사 할 수있는 유효한 호스트 가 있어야합니다 .


답변

내가 경험 한 문제에 부가 가치를 추가하려는 시도에서; 다른 대답으로 :

내 네트워크는 사무실과 관련이 있었고 컨테이너는 IP 주소는 핑할 수 있지만 도메인 이름은 핑할 수 없도록 Google DNS 설정이 차단되었습니다.

내 호스트의 /etc/resolv.conf원래 모습은 다음과 같습니다.

#Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search companyDomain.co.za

이는 Network Manager가 DNS 서버 세부 사항에 대해 일종의 마스킹을 수행하기 때문입니다.

불행히도 docker manuals 에 따르면 docker는 컨테이너의 resolv.conf를 빌드 할 때 로컬 호스트 IP 주소를 필터링하여 Google의 DNS IP로 대체합니다. 필자의 경우 도메인 이름이 제한을 벗어났습니다.

나는해야했다 :

  • /etc/default/docker컨테이너가 호스트의 resolv.conf 컨텐츠를 대신 사용하도록 my 를 기본값으로 재설정하십시오 .
  • 행을 편집 /etc/NetworkManager/NetworManager.conf하고 주석 처리하십시오 dns=dnsmasq. 따라서 NM은 127.0.0.1 대신 실제 DNS IP 주소를 지정할 수 있습니다.
  • 로 NM을 다시 시작하십시오 sudo service network-manager restart.
  • 로 도커 서비스를 다시 시작하십시오 sudo service docker restart.

컨테이너를 실행하면 apt-get update/upgrade예를 들어 컨테이너를 수행 할 수 있습니다 .


답변

귀하의 오류는 여기에 있습니다 :

 Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19).
 connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]

이것은 DNS의 오류가 아니라 시스템이 IPv6 호스트에 연결하려고 시도하고 실패하는 것입니다. 호스트에 IPv6 액세스 권한이 없기 때문일 수 있습니다. IPv6 주소의 실제 조회가 성공합니다. (우분투 미러 / 아카이브는 IPv6와 IPv4 모두에서 사용할 수 있습니다. 시스템이 제대로 작동한다고 생각하기 때문에 IPv6에 도달 할만큼 운이 없었습니다.)

miredo설치 하여 수정 하거나 IPv4 미러에 도달 할 때까지 다시 시도해야합니다.

여기서 다시 한 번 알아야 할 것은 자신의 핑 테스트에서 볼 수 있듯이 DNS가 책임을지지 않는다는 것입니다.


답변

Docker 공식 문서 는 Docker에서 사용할 DNS 서버를 구성하는 도구를 제공합니다.

  1. /etc/default/docker편집 할 파일을여십시오.

    sudo nano /etc/default/docker
    
  2. Docker에 대한 설정을 추가하십시오.

    DOCKER_OPTS="--dns 8.8.8.8"
    
  3. 8.8.8.8와 같은 로컬 DNS 서버로 교체하십시오 192.168.1.1. 여러 DNS 서버를 지정할 수도 있습니다. 예를 들어 공백으로 구분하십시오.

    --dns 8.8.8.8 --dns 192.168.1.1
    

    경고 : 다양한 네트워크에 연결된 랩톱에서이 작업을 수행하는 경우 공용 DNS 서버를 선택하십시오.

    추신 : nm-tool로컬 호스트 DNS 서버를 확인하는 데 사용할 수 있습니다

  4. 파일을 저장하고 닫습니다.

  5. Docker 데몬을 다시 시작하십시오.

    sudo service docker restart
    

답변

boot2docker를 사용하는 동안 여기에 오는 다른 독자들을 위해 여기에 내가 고쳐진 방법이 있습니다. 사실, 위의 대답은 올바른 방향을 가리 켰습니다.

기본적으로 어떤 이유로 boot2docker 내의 컨테이너가 호스트 이름을 확인할 수 없습니다.

방금 boot2docker를 다시 시작하고 컨테이너를 시작했습니다. 이제 호스트 이름을 다시 올바르게 확인할 수 있습니다.

호스트의 네트워크가 연결되어있는 동안 boot2docker를 시작하면 문제가 발생하여 boot2docker가 시작되어 작동하지 않는 상태가되었습니다.


답변

Windows에서 동일한 문제가 발생했습니다. 이 명령은 나를 위해 일했습니다 :docker-machine restart