programing

도커 빌드 "Can't resolve 'archive.ubuntu.com '" apt-get이 아무것도 설치하지 못함

telecom 2023. 8. 18. 20:51
반응형

도커 빌드 "Can't resolve 'archive.ubuntu.com '" apt-get이 아무것도 설치하지 못함

저는 이전에 작동했던 다양한 파일에서 Docker 빌드를 실행하려고 노력했지만, 지금은 더 이상 작동하지 않습니다.

Docker 파일에 소프트웨어를 설치하기 위한 줄이 포함되는 즉시 패키지를 찾을 수 없다는 메시지와 함께 실패합니다.

RUN apt-get -y install supervisor nodejs npm

로그에 표시된 일반적인 메시지는 다음과 같습니다.

Could not resolve 'archive.ubuntu.com'

소프트웨어가 설치되지 않는 이유가 무엇인지 아십니까?

달기 석기DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"/etc/default/docker 캐리어가 제안한 처럼 제겐 효과가 없었습니다.우리 회사의 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

명령이 중단된 것처럼 보이지만 결국 "can't resolve 'google.com '"라는 오류를 뱉으면 저와 같은 문제가 발생합니다.

nslookup명령은 'google.com '의 텍스트 주소를 IP 주소로 변환하기 위해 DNS 서버 8.8.8을 쿼리합니다.아이러니하게도 8.8.8.8은 구글의 공용 DNS 서버입니다. 만약에nslookup8.8.8.8과 같은 공용 DNS 서버가 회사의해 차단될 수 있습니다(보안상의 이유인 것 같습니다).

를 "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

이제 도커를 다시 시작합니다.

$ 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

참조:

저는 제 해결책을 로빈 윈슬로우의 기사에 기초했습니다. 그는 해결책에 대한 모든 공로를 인정받아야 합니다.고마워, 로빈!

"Docker의 네트워킹 DNS 구성을 수정합니다."로빈 윈슬로우.2016-11-09를 검색했습니다.https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/

많은 두통 끝에 저는 답을 찾았습니다.Could not resolve 'archive.ubuntu.com'다음과 같이 변경하여 수정할 수 있습니다.

  1. 다음 행의 주석을 제거합니다./etc/default/docker
    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

  2. 시작: "Docker 서비스 시작sudo service docker restart

  3. 잘못된 DNS 설정을 캐시한 이미지를 삭제합니다.

  4. 다시 빌드하면 문제가 해결됩니다.

Andrew SB에게 크레딧이 갑니다.

같은 문제가 발생하지만 /etc/default/docker dns 항목의 주석을 제거하거나 빌드 컨테이너 또는 /etc/docker/daemon.json /etc/resolv.conf를 편집하는 것은 도움이 되지 않습니다.

하지만 --network=host 옵션을 사용하여 빌드한 후에는 다시 문제가 해결되었습니다.

docker build --network=host -t my-own-ubuntu-like-image .

아마도 이것은 누군가를 다시 도울 것입니다.

저는 매트 캐리어의 답변이 이 문제에 대한 올바른 해결책이라고 생각합니다.그러나 구현한 후에도 여전히 동일한 동작을 관찰했습니다.could not resolve 'archive.ubuntu.com'.

이를 통해 연결된 네트워크가 공용 DNS를 차단하고 있음을 알게 되었습니다.이 문제에 대한 해결책은 호스트(Docker를 실행하던 컴퓨터)가 사용하던 것과 동일한 네임 서버를 사용하도록 Docker 컨테이너를 구성하는 것이었습니다.

분석 방법:

  1. Docker 설명서를 검토할 때부터 이미 컴퓨터에 예제 이미지를 설치했습니다.는 해당 새 에 새 할 수 . 새 컨 테 이 너 컨 에 션 새 세 생 있 었 습 니 다 수 할 성 을 서 너 이 테 해 시 를 당 실 하 행 작 고 해 이 하 여 미docker run -it docker/whalesay bash
  2. 컨테이너에 인터넷이 연결되어 있습니까?:ping 172.217.4.238.com google.com )
  3. 컨테이너가 호스트 이름을 확인할 수 있습니까?ping google.com

에는 첫 저같은경첫번째는우에번▁first▁the.ping결과적으로 반응이 있었고, 두 번째는 응답하지 않았습니다.

수정 방법:

DNS가 컨테이너 내부에서 작동하지 않는 것을 발견하면 호스트에서 동일한 동작을 복제할 수 있음을 확인했습니다.nslookup google.com호스트에서 정상적으로 해결되었습니다.그렇지만,nslookup google.com 8.8.8.8또는nsloookup google.com 8.8.4.4시간 초과했습니다.

다으로호실사용중네서찾다았버니를 .nm-tool(Ubuntu 14.04인치).피드백의 다시 파일에 했습니다.sudo vi /etc/resolv.conf후 다시했습니다.ping google.com에는 효과가 그리고 이번에는 효과가 있었습니다!

컨테이너의 resolv.conf에 대한 변경 내용은 영구적이지 않으며 컨테이너를 다시 시작하면 손실됩니다.의 경우,제 서버의 주소에 이 더 이었습니다./etc/default/dockerjava.

기본 도커 파일에 로컬 dnsip을 추가한 후 작동하기 시작했습니다...아래 단계를 찾아주세요...

$ 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)

이제 도커를 만들어 보세요... :)

이 문제를 겪고 있는 사람들을 위해, 저는 제 문제를 편집함으로써 해결했습니다./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)

제 경우였어요.이것이 이 문제를 겪고 있는 모든 사람에게 도움이 되기를 바랍니다.

나는 구글링을 좀 한 후에 이 답을 발견했습니다.Windows(윈도우)를 사용하고 있기 때문에 위의 답변 중 일부가 파일 시스템에 적용되지 않았습니다.

기본적으로 실행:

docker-machine ssh default
echo "nameserver 8.8.8.8" > /etc/resolv.conf

은 기존네서덮다니어씁과 함께 .8.8.8.8가 있었어요저한테 효과가 있었어요!

일부 의견에 따르면, 당신은 루트여야 할 수도 있습니다.는 , 를 발행합니다.sudo -i.

저는 검색 엔진에서 이 문제를 발견한 사람들에게 늦은 응답을 추가하고 싶습니다.

다음을 수행하지 마십시오./etc/default/docker에 설정할 옵션이 있었습니다.iptables=false이는 ufw가 작동하지 않았기 때문입니다(3개의 포트만 허용되었음에도 모든 것이 개방되었습니다). 그래서 저는 이 질문에 대한 답을 맹목적으로 따랐습니다.Docker를 사용할 때 UFW(Uncomplexed Firewall)가 아무것도 차단하지 않고 있으며 이는 댓글에 링크되어 있습니다.

저는 일반적으로 iptables 규칙 / nat / routing에 대한 이해가 매우 낮기 때문에 제가 비이성적인 행동을 했을 수도 있습니다.

제가 잘못 구성하여 컨테이너 내부의 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 구성(fore.dll)을 되돌리고 ufw를 사용하지 않도록 설정하고 /etc/default/dller에서 iptables=false를 제거하면 컨테이너의 DNS 확인 기능이 복원됩니다.

저는 이제 이러한 지침을 따라 ufw 기능을 다시 활성화하기를 기대하고 있습니다.

저는 지금도 이것으로 한동안 어려움을 겪었지만, 이것이 제가 그것을 해결한 것입니다.Ubuntu 16.04 x64누군가의 시간도 절약되기를 바랍니다.

  1. /etc/NetworkManager/NetworkManager.conf을 말하다#dns=dnsmasq

  2. 를 생성 수정)/etc/docker/daemon.json:

{
    "dns": ["8.8.8.8"]
}
  1. 를 다시 시작하려면 명령을 사용합니다.sudo service docker restart

동일한 문제가 발생하여 언급된 단계를 시도했지만 네트워크 설정을 새로 고치기 전까지는 아무 것도 작동하지 않는 것 같습니다.

단계:

  1. 언급한 것처럼, 한바와같이추가, 언급가를 합니다.DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"/etc/default/docker.
  2. 은 PREROUTING을 하여 수동으로 .iptables -t nat -F POSTROUTING이를 실행한 후 도커를 다시 시작하면 도커가 새 IP 범위로 nat 테이블을 초기화됩니다.

Ubuntu Xenial에서도 동일한 문제가 발생했습니다.

  • docker run --dns ...작업된 컨테이너에 대해.
  • 다에 대도 음데 에 대한 중docker build(카운터-카운터 등)이 작동하지 않았습니다.

log( 로그) 후 (journalctl -u docker.service) 잘못된 resolvconf에 대한 경고가 적용된 경우.

그 후 우리 회사 이름 서버가 네트워크 인터페이스에 추가되었지만 resolvconf에는 추가되지 않았습니다.

솔루션 적용인터페이스에서 정적 DNS를 구성하려면 어떻게 해야 합니까? (ascubuntu), 즉 이름 서버 추가/etc/resolvconf/resolv.conf.d/tail

resolvconf를 업데이트한 후(또는 재부팅 후)

bash docker run --rm busybox nslookup google.com

즉시 작동했습니다.

제 도커 컴포지트 빌드가 모두 작동합니다.

오늘도 같은 문제가 발생했습니다. 아래 행을 /etc/default/docker에 추가했습니다.

DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8"

노트북을 다시 시작했습니다.

저의 경우 도커 데몬을 다시 시작하는 것만으로는 충분하지 않습니다. 노트북을 다시 시작해야 작동합니다.

다른 솔루션에 너무 많은 시간을 투자하기 전에 Docker를 다시 시작하고 다시 시도하십시오.

Windows 10에서 Docker Desktop for Windows를 사용하여 문제를 해결했습니다.

저의 경우, 컨테이너가 클라우드 환경에 있었기 때문에 인터페이스의 MTU가 일반적으로 1500이 아니었으며 1450과 비슷했기 때문에 컨테이너의 MTU를 1450으로 설정하도록 도커 데몬을 구성해야 했습니다.

{  
"mtu": 1454 
}

이것을 보세요: https://mlohr.com/docker-mtu/ .

저의 경우, 방화벽이 문제였습니다.현재 이 기능을 사용하지 않도록 설정하면 문제가 해결되었습니다.사용합니다nftables서비스를 중지한 것이 효과가 있었습니다.

sudo systemctl stop nftables.service 

업데이트와 다음 /etc/docker/daemon.json이었습니다.

{
    "bridge": "none"
}

후 다음과 합니다.sudo systemctl restart docker

OS(Ubuntu 20.04.3 LTSversion 20.10.11, build dea9396)

시스템에서 (내시템에서스(서▁on에)macOS High Sierra 10.13.6와 함께Docker 2.1.0.1이것은 회사 대리인 때문이었습니다.

저는 이 문제를 두 단계로 해결했습니다.

  1. 에서 프록시 합니다.Preferences>Proxies
  2. config.json 내부의 합니다.~/.docker/config.json 예:

     "proxies":
    {
      "default":
      {
        "httpProxy": "MYPROXY",
        "httpsProxy": "MYPROXY",
        "noProxy": "MYPROXYWHITELIST"
      }
    }
    

있습니다dnsmasq 이름 DNS 합니다. 도커 복사본/etc/resolv.conf컨테이너의 내부에 있는 호스트 시스템의/etc/resolv.conf따라서 올바른 네임 서버가 없습니다.문서에서:

합니다. 즉, "DNS 설정"에./etc/resolv.conf구성 파일.

에서 /etc/resolv.conf호스트가 문제를 해결했습니다.

저는 매우 어리석은 이유로 이것을 접했습니다.몇 주 전에 프록시를 통해 트래픽을 전송하도록 도커를 구성했는데, 이를 제거한 후 도커에게 더 이상 사용하지 말라고 말하는 것을 잊었습니다.

당신이 비슷한 일을 했는지 확인해 볼 가치가 있을지도 모릅니다.

에 가다~/.docker/config.json그리고 그 안에 이런 것이 없는지 확인합니다.

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.12:3128",
     "httpsProxy": "http://192.168.1.12:3128",
     "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
   }
 }
}

있는 경우 제거하고 도커 디먼/데스크탑을 다시 시작한 후 다시 시도하십시오.저는 그것으로 해결했습니다.

작은 참고 사항: 닫히고 도커 데스크톱(맥에서)이 다시 열리지 않아 이렇게 강제로 종료해야 했지만 이후 모든 것이 예상대로 작동했습니다.

도커 빌드를 실행할 때 다음 옵션 중 하나를 사용합니다.

--network=host
--network=bridge
--network={your_own}   #ensure that driver is either bridge or host

기본 네트워크 값으로는 외부 네트워크에 연결할 수 없습니다.

  --network string          Set the networking mode for the RUN instructions during build (default "default")

언급URL : https://stackoverflow.com/questions/24991136/docker-build-could-not-resolve-archive-ubuntu-com-apt-get-fails-to-install-a

반응형