Mam problem z budowaniem obrazów Dockera w mojej sieci firmowej. Właśnie zaczynam pracę z Dockerem, więc mam następujący plik Dockerfile dla aplikacji typu hello-world:
# DOCKER-VERSION 0.3.4
FROM centos:6.4
# Enable EPEL for Node.js
RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN yum install -y npm
# Bundle app source
ADD . /src
# Install app dependencies
RUN cd /src; npm install
EXPOSE 8080
CMD ["node", "/src/index.js"]
Działa to dobrze, gdy buduję go na moim laptopie w domu, w mojej własnej sieci bezprzewodowej. Ściąga wymagane zależności i poprawnie buduje obraz.
Jednak kiedy jestem w mojej sieci firmowej w pracy, ta sama kompilacja dockera kończy się niepowodzeniem podczas próby ściągnięcia RPM z download.fedoraproject.org, z tym komunikatem o błędzie:
Krok 2: URUCHOM rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm ---> Uruchomiony w e0c26afe9ed5 curl: (5) Couldn ' t rozwiązać błąd proxy „some.proxy.address”: pomijanie http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - przesyłanie nie powiodło się
W mojej sieci firmowej mogę uzyskać dostęp do tego adresu URL z laptopa. Ale gdy Docker próbuje zbudować kontener, nagle nie może go w ogóle rozwiązać. To zachowanie jest takie samo w przypadku wielu różnych zasobów zewnętrznych (apt-get itp.): Wszystkie mogą być poprawnie rozwiązane na moim laptopie w sieci firmowej, ale Docker nie może ich rozwiązać.
Nie mam znajomości sieci, aby dowiedzieć się, co się tutaj dzieje. Czy ktoś wie, dlaczego to dziwne zachowanie miałoby się pojawiać podczas budowania kontenerów Dockera?
apt-get update
.Odpowiedzi:
Udało mi się rozwiązać problem. W systemie Ubuntu Docker ustawia serwery DNS kontenera na serwery Google na 8.8.8.x. Jak rozumiem, jest to obejście w systemie Ubuntu, ponieważ Ubuntu ustawia /etc/resolv.conf na 127.0.0.1.
Te serwery Google nie były dostępne zza naszej zapory, dlatego nie mogliśmy rozwiązać żadnych adresów URL.
Rozwiązaniem jest poinformowanie platformy Docker, których serwerów DNS ma używać. Ta poprawka zależy od sposobu zainstalowania Dockera:
Pakiet Ubuntu
Jeśli masz zainstalowany pakiet Ubuntu, edytuj / etc / default / docker i dodaj następujący wiersz:
Możesz dodać dowolną liczbę serwerów DNS do tej konfiguracji. Po edycji tego pliku będziesz chciał ponownie uruchomić usługę Docker:
Pliki binarne
Jeśli zainstalowałeś Dockera za pomocą metody binarnej (tj. Bez pakietu), to ustawiasz serwery DNS po uruchomieniu demona Dockera:
źródło
--dns
opcją lub wrzucając konfigurację/etc/default/docker
Radzę zmienić ustawienia DNS demona Dockera. Możesz ustawić domyślne opcje demona Dockera, tworząc plik konfiguracyjny demona w /etc/docker/daemon.json . Ustaw serwer DNS zgodnie z maszyną hostującą, np. Mój serwer DNS to 10.0.0.2:
Następnie wystarczy ponownie uruchomić usługę docker:
Wyjaśnienie krok po kroku jest dostępne tutaj. Napraw konfigurację DNS sieci Docker
źródło
Poniższe kroki działają dla mnie (zarówno dla polecenia docker build, jak i docker run). Moja wersja dla systemu Linux to Ubuntu 14.04.
Ten wynik DNS: 192.168.1.1 w moim przypadku
źródło
/etc/sysconfig/docker
plik, do którego udało mi się dodaćDOCKER_OPTS="--dns 8.8.8.8"
linię i rozwiązać mój problem./etc/sysconfig/docker
plik.W przypadku dowolnej dystrybucji Linuksa współpracującej z SystemD (Ubuntu 16, RHEL 7 ...) ścieżka zostanie wyświetlona za pomocą następującego polecenia:
Ścieżka byłaby
/lib/systemd/system/docker.service
. DodajDOCKER_OPTS
wartości, które mogą mieć dowolne z--dns
, w wierszu, w którym uruchamiany jest demon.źródło
docker.service
musiałem zatrzymać usługę dokowania,sudo service docker stop
a potemsystemctl daemon-reload
i na koniecsudo service docker start
/etc/systemd/system/docker.service.d
ze zmodyfikowaną konfiguracją (która pomaga systemowi scalić / nadpisać konfigurację systemu) niż zmieniać wersję systemu. Ta ostatnia zostanie utracona podczas aktualizacji.Docker (przynajmniej> = 1.13, prawdopodobnie wcześniej) na Mac i Windows pozwala skonfigurować DNS w Preferencjach -> Demon -> Zaawansowane:
Poniższa konfiguracja ustawia dwa firmowe serwery DNS (użyj tutaj własnych wartości) z możliwością powrotu do publicznych serwerów DNS Google.
źródło
Określ swój DNS do demona Docker.
Przede wszystkim uzyskaj swój adres DNS
Sprawdź, czy problem naprawdę dotyczy DNS, uruchamiając kontener docker wymuszający ten nowy DNS
Jeśli to rozwiąże problem, możesz zastosować tę poprawkę dla wszystkich demonów Dockera w następujący sposób
Edytuj lub utwórz plik /etc/docker/daemon.json
Dodaj następujący wiersz do tego pliku
Uruchom ponownie okno dokowane
Bardzo fajny przewodnik dotyczący wykonywania WSZYSTKICH tego procesu można znaleźć tutaj.
https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
źródło
daemon.json
będzie to/var/snap/docker/<id>/config/daemon.json
Rozwiązanie bez ponownego uruchamiania usługi Docker
Istnieje możliwość zmodyfikowania ustawień DNS dla pojedynczego obrazu platformy Docker bez wpływu na inne
docker build
wywołania (i bez ponownego uruchamiania usługi Docker), zastępującresolv.conf
w czasie kompilacji:Zastąp adres IP
123.123.123.123
tym, który jest używany w Twojej sieci firmowej (użyj,nmcli dev show | grep 'IP4.DNS'
aby uzyskać aktualnie używany serwer DNS).Wady:
źródło
Na moim komputerze z systemem Ubuntu 16.04 czasami DNS Google nie działa przy tworzeniu obrazów Dockera.
Muszę ręcznie znaleźć DNS mojego dostawcy usług za pomocą następującego polecenia
i dodaj go do mojego,
daemon.json
jak pokazano poniżej(PS nm-tool jest przestarzałe od Ubuntu 15.04)
źródło