Próbowałem uruchomić kompilację Dockera na różnych plikach, które wcześniej działały, a teraz już nie działają.
Gdy tylko plik Dockera zawierał jakąkolwiek linię, która miała zainstalować oprogramowanie, zakończyła się niepowodzeniem z komunikatem informującym, że pakiet nie został znaleziony.
RUN apt-get -y install supervisor nodejs npm
Typowy komunikat, który pojawiał się w dziennikach, brzmiał
Could not resolve 'archive.ubuntu.com'
Masz jakiś pomysł, dlaczego nie można zainstalować żadnego oprogramowania?
newgrp docker
wydam zamiast robić pełne wylogowanie, a następnie zaloguj się po podaniu sobiesudo usermod -aG docker myuserid
... jest to wyjątkowa sprawa dla pewnie jednak tak się dziejeOdpowiedzi:
Odkomentowanie
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
w/etc/default/docker
jak Matt Przewoźnik zaproponował zrobił nie dla mnie. Ani też umieszczenie serwerów DNS mojej firmy w tym pliku. Ale jest inny sposób (czytaj dalej).Najpierw zweryfikujmy problem:
Jeśli wydaje się, że polecenie się zawiesiło, ale w końcu wypluwa błąd „nie można rozwiązać adresu„ google.com ””, oznacza to, że masz ten sam problem co ja.
nslookup
Komenda wysyła zapytanie do serwera DNS 8.8.8.8 w celu przekształcenia adresu tekst „google.com” na adres IP. Jak na ironię, 8.8.8.8 to publiczny serwer DNS Google . Jeślinslookup
zawiedzie, publiczne serwery DNS, takie jak 8.8.8.8, mogą zostać zablokowane przez twoją firmę (co, jak zakładam, jest ze względów bezpieczeństwa).Można by pomyśleć, że dodanie serwerów DNS Twojej firmy do
DOCKER_OPTS
in/etc/default/docker
powinno załatwić sprawę, ale z jakiegoś powodu nie zadziałało. Poniżej opiszę, co zadziałało.ROZWIĄZANIE :
Na hoście (używam Ubuntu 16.04) znajdź podstawowy i pomocniczy adres serwera DNS:
Korzystając z tych adresów, utwórz plik
/etc/docker/daemon.json
:Umieść to w
/etc/docker/daemon.json
:Wyjdź z roota:
Teraz zrestartuj docker:
WERYFIKACJA :
Teraz sprawdź, czy dodanie
/etc/docker/daemon.json
pliku umożliwia przekształcenie „google.com” w adres IP:ODNIESIENIA :
Swoje rozwiązanie oparłem na artykule Robina Winslowa, któremu należy się pochwała za to rozwiązanie. Dzięki, Robin!
„Napraw konfigurację DNS sieci Docker”. Robin Winslow. Źródło 2016-11-09. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
źródło
nslookup google.com 8.8.8.8
W moim przypadku tak jest, więc mam ten błądconnection timed out; no servers could be reached
/etc/default/docker
nie zadziałał u niektórych osób (cytując komentarz z pliku)# THIS FILE DOES NOT APPLY TO SYSTEMD
Po wielu bólach głowy znalazłem odpowiedź.
Could not resolve 'archive.ubuntu.com'
można naprawić, wprowadzając następujące zmiany:Odkomentuj następujący wiersz
/etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Uruchom ponownie usługę Docker
sudo service docker restart
Usuń wszystkie obrazy, które zapisały w pamięci podręcznej nieprawidłowe ustawienia DNS.
Kredyt należy do Andrew SB
źródło
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
ale nic innego się nie wydarzyło.Napotykam ten sam problem, ale nie pomaga mi odkomentowywanie wpisów / etc / default / docker dns, edytowanie /etc/resolv.conf w kontenerze kompilacji lub /etc/docker/daemon.json .
Ale po skompilowaniu z opcją --network = host rozwiązanie znów było w porządku.
Może to znowu komuś pomoże.
źródło
Uważam, że odpowiedź Matta Carriera jest właściwym rozwiązaniem tego problemu. Jednak po jego wdrożeniu nadal obserwowałem to samo zachowanie:
could not resolve 'archive.ubuntu.com'
.Doprowadziło mnie to w końcu do stwierdzenia, że sieć, z którą byłem połączony, blokowała publiczny DNS. Rozwiązaniem tego problemu było skonfigurowanie mojego kontenera Docker tak, aby używał tego samego serwera nazw, z którego korzystał mój host (maszyna, z której uruchomiłem Docker).
Jak triaged:
docker run -it docker/whalesay bash
ping 172.217.4.238
(google.com)ping google.com
W moim przypadku pierwsza
ping
zaowocowała odpowiedziami, druga nie.Jak naprawiłem:
Kiedy odkryłem, że DNS nie działa w kontenerze, zweryfikowałem, że mogę skopiować to samo zachowanie na hoście.
nslookup google.com
rozwiązane dobrze na hoście. Alenslookup google.com 8.8.8.8
czynsloookup google.com 8.8.4.4
przekroczono limit czasu.Następnie znalazłem serwery nazw, których używał mój host, uruchamiając
nm-tool
(na Ubuntu 14.04). W stylu szybkiej informacji zwrotnej, zacząłem się przykładowy obraz ponownie i dodaje adres IP serwera nazw do pliku resolv.conf kontenera:sudo vi /etc/resolv.conf
. Po zapisaniu ponownie spróbowałem ping (ping google.com
) i tym razem zadziałało!Należy pamiętać, że zmiany wprowadzone w resolv.conf kontenera nie są trwałe i zostaną utracone po ponownym uruchomieniu kontenera. W moim przypadku bardziej odpowiednim rozwiązaniem było dodanie adresu IP serwera nazw mojej sieci do
/etc/default/docker
pliku hosta .źródło
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) inmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). Kredyt: Marty Fried .Po dodaniu lokalnego adresu IP dns do domyślnego pliku dockera zaczęło działać dla mnie ... znajdź poniższe kroki ...
Teraz idź dalej i zbuduj docker ... :)
źródło
Dla każdego, kto również ma ten problem, rozwiązałem go, edytując plik
/etc/default/docker
plik, zgodnie z sugestiami innych odpowiedzi i pytań. Jednak nie miałem pojęcia, jakiego adresu IP użyć jako DNS.Dopiero po chwili zorientowałem się, że muszę uruchomić
ifconfig docker
na hoście, aby wyświetlić adres IP interfejsu sieciowego dockera.Tak było
172.17.0.1
w moim przypadku. Mam nadzieję, że pomoże to każdemu, kto również ma ten problem.źródło
ifconfig docker0
Znalazłem tę odpowiedź po pewnym wygooglowaniu. Używam systemu Windows, więc niektóre z powyższych odpowiedzi nie dotyczą mojego systemu plików.
Zasadniczo uruchom:
Który po prostu zastępuje istniejący serwer nazw używany z
8.8.8.8
moim zdaniem. U mnie zadziałało!Na podstawie niektórych komentarzy może być konieczne uprawnienia administratora. Aby to zrobić, wystaw
sudo -i
.źródło
ssh
nie istnieje?sudo -i
Chciałem tylko dodać późną odpowiedź dla każdego, kto napotka ten problem z wyszukiwarek.
NIE rób tego: miałem opcję w / etc / default / docker do ustawienia
iptables=false
. Było tak, ponieważ ufw nie działał (wszystko było otwarte, mimo że tylko 3 porty były dozwolone), więc ślepo podążyłem za odpowiedzią na to pytanie: Nieskomplikowana zapora ogniowa (UFW) nie blokuje niczego podczas korzystania z Dockera i to, co zostało połączone w komentarzeMam bardzo słabe zrozumienie reguł iptables / nat / routingu w ogóle, dlatego mogłem zrobić coś irracjonalnego.
Okazuje się, że prawdopodobnie źle go skonfigurowałem i zabiłem rozpoznawanie nazw DNS w moich kontenerach. Kiedy prowadziłem interaktywny terminal kontenerowy:
docker run -i -t ubuntu:14.04 /bin/bash
Miałem takie wyniki:
Przywrócenie całej mojej konfiguracji ufw (before.rules), wyłączenie ufw i usunięcie iptables = false z / etc / default / docker przywróciło funkcjonalność rozpoznawania DNS kontenerów.
Nie mogę się teraz doczekać ponownego włączenia funkcji ufw, postępując zgodnie z tymi instrukcjami .
źródło
Mam ten sam problem i wypróbowałem wymienione kroki, ale wydaje się, że żadna nie działa, dopóki nie odświeżysz ustawień sieciowych.
Kroki:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"
do/etc/default/docker
.iptables -t nat -F POSTROUTING
. Po uruchomieniu tego zrestartuj docker i zainicjuje tabelę nat z nowym zakresem IP.źródło
Dla mnie ten sam problem (na Ubuntu Xenial).
docker run --dns ...
dla kontenerów pracował.docker build
(docker-compose itp.) Nie działa.Po przeanalizowaniu docker logs (
journalctl -u docker.service
), jeśli znalazłem ostrzeżenie o błędnym zastosowaniu resolvconf.Następnie stwierdziłem, że nasze firmowe serwery nazw zostały dodane do interfejsów sieciowych, ale nie w resolvconf.
Zastosowałem to rozwiązanie Jak skonfigurować mój statyczny DNS w interfejsach? (askubuntu) , czyli dodawanie serwerów nazw do
/etc/resolvconf/resolv.conf.d/tail
Po aktualizacji resolvconf (lub restarcie).
bash docker run --rm busybox nslookup google.com
działał natychmiast.
Wszystkie moje kompilacje docker-compose teraz działają.
źródło
Mam dziś ten sam problem, właśnie dodałem wiersz poniżej do / etc / default / docker
a potem ponownie uruchomiłem laptopa.
W moim przypadku ponowne uruchomienie demona dockera nie wystarczy, muszę ponownie uruchomić laptopa, aby działał.
źródło
Zanim spędzisz zbyt dużo czasu na jakimkolwiek innym rozwiązaniu, po prostu uruchom ponownie Dockera i spróbuj ponownie.
Rozwiązałem problem, używając Docker Desktop dla Windows w systemie Windows 10.
źródło
Od jakiegoś czasu też się z tym zmagałem, ale tutaj właśnie to dla mnie rozwiązało
Ubuntu 16.04 x64
. Mam nadzieję, że to też oszczędza komuś czas.W
/etc/NetworkManager/NetworkManager.conf
: skomentuj#dns=dnsmasq
Utwórz (lub zmodyfikuj)
/etc/docker/daemon.json
:sudo service docker restart
źródło
W moim systemie (
macOS High Sierra 10.13.6
zDocker 2.1.0.1
) było to spowodowane korporacyjnym proxy.Rozwiązałem to w dwóch krokach:
Preferences>Proxies
Dodaj te same ustawienia do pliku config.json w środku, na
~/.docker/config.json
przykład:źródło