Postępuję zgodnie z przewodnikiem rys, aby używać dockera z aplikacją w języku Python, ale kiedy docker dostanie się do polecenia
RUN pip install -r requirements.txt
Otrzymuję następujący komunikat o błędzie:
Step 3 : RUN pip install -r requirements.txt
---> Running in fe0b84217ad1
Collecting blinker==1.3 (from -r requirements.txt (line 1))
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/
Powtarza się to kilka razy, a następnie otrzymuję kolejną wiadomość:
Could not find any downloads that satisfy the requirement blinker==1.3 (from -r requirements.txt (line 1))
No distributions at all found for blinker==1.3 (from -r requirements.txt (line 1))
Więc z jakiegoś powodu pip nie może uzyskać dostępu do żadnych pakietów z kontenera Dockera. Czy jest coś, co muszę zrobić, aby umożliwić mu dostęp do Internetu?
Jednak pip działa dobrze, aby zainstalować rzeczy poza kontenerem docker i działał dobrze nawet z tym dokładnym pakietem ( blinker==1.3
), więc to nie jest problem. Również ten problem nie jest specyficzny dla tego pakietu. Ten sam problem występuje z każdym pip install
poleceniem dla dowolnego pakietu.
Czy ktoś ma pojęcie, co się tutaj dzieje?
docker run mycontainer pip install -r requirements.pip
wyjść poza kontekst figowy? Mimo to brzmi to jak problem z wersją pip. W przypadku niektórych nowszych wersji pip potrzebujesz, więc określ więcej opcji wiersza poleceń podczas uruchamiania,pip install
aby znaleźć określone pakiety.FROM python:2.7
więc będzie to dowolna wersja pip, która zawiera Python 2.7.9. Nie próbowałem uruchamiać poleceń pip oddzielnie, ale to dlatego, że nie mogę nawet zbudować kontenera, ponieważ pip nie działa. Mogę spróbować zrobić pusty kontener Pythona i przetestować go, gdy będę miał okazjępip install --no-use-wheel --allow-all-external -r requirements.pip
a jeśli to nie pomoże, spróbujpip install --no-use-wheel --allow-all-external --allow-unverified blinker -r requirements.pip
. To działało w przeszłości, kiedy miałem podobny błąd zpip install
. Możesz również spróbować usunąć ten wiersz z DockerFile, a następnie skompilować kontener bez niego, aby sprawdzić, czy polecenie może zostać wykonane później. Jak już powiedziano, nie sądzę, że o to chodzi.Odpowiedzi:
Twój problem wynika z faktu, że Docker nie używa właściwego serwera DNS. Możesz to naprawić na trzy różne sposoby:
1. Dodanie Google DNS do konfiguracji lokalnej
Modyfikacja /etc/resolv.conf i dodanie na końcu następujących linii
# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4
Jeśli chcesz dodać inne serwery DNS, zajrzyj tutaj .
Jednak ta zmiana nie będzie trwała (zobacz ten wątek ). Aby stała się trwała:
$ sudo nano /etc/dhcp/dhclient.conf
Odkomentuj i edytuj wiersz z przedrostkiem nazwa-domeny-serwera:prepend domain-name-servers 8.8.8.8, 8.8.4.4;
Restart dhclient:
$ sudo dhclient
.2. Modyfikowanie konfiguracji Dockera
Jak wyjaśniono w dokumentach :
1. Log into Ubuntu as a user with sudo privileges. 2. Open the /etc/default/docker file for editing : $ sudo nano /etc/default/docker 3. Add the following setting for Docker. DOCKER_OPTS="--dns 8.8.8.8" 4. Save and close the file. 5. Restart the Docker daemon : $ sudo systemctl restart docker
3. Użycie parametru podczas uruchamiania Dockera
Po uruchomieniu dockera po prostu dodaj następujący parametr:
--dns 8.8.8.8
źródło
--dns
flaga jest dostępna tylko nadocker
komendzie. Nie mogę jeszcze znaleźć odpowiednika dla Docker-Compose.Musiałem dodać --network = host do mojego polecenia kompilacji docker:
źródło
Miałem ten sam problem i nękał mnie przez jakiś czas i próbowałem wielu rozwiązań online, ale bezskutecznie. Jednak ostatecznie rozwiązałem to w następujący sposób:
Bieganie:
Ubuntu 16.04 docker Server 18.03.0-ce
Odkryj adres swojego serwera DNS.
Odkryj adres swojego serwera DNS, uruchamiając następujące polecenie:
$: nmcli dev show | grep 'IP4.DNS' IP4.DNS[1]: 192.168.210.2
Zaktualizuj demona platformy Docker
Utwórz plik konfiguracyjny Dockera w
/etc/docker/daemon.json.
( jeśli jeszcze go nie masz ) i dodaj następującą zawartość do pliku:{ "dns": ["192.168.210.2", "8.8.8.8"] }
Pierwszą pozycją w tablicy jest serwer DNS Twojej sieci, a drugą jest serwer DNS Google jako rezerwę, gdy DNS Twojej sieci jest niedostępny.
Zapisz plik, a następnie uruchom ponownie usługę Docker
źródło
docker-ce
. Uwaga: nie miałem plikudaemon.json
. Prawdopodobnie ten plik nie jest tworzony domyślnie podczas instalacji i musisz go utworzyć ręcznie.To było dla mnie rozwiązanie:
źródło
docker-machine restart
a następniedocker-machine env
(tak jak mnie o to poprosił) i naprawiłem problem.U mnie pomogło po prostu ponowne uruchomienie demona dockera.
źródło
Dla użytkowników Ubuntu
Musisz dodać nowe adresy DNS w konfiguracji Dockera
Dodaj nazwy DNS po ExecStar.
--dns 10.252.252.252 --dns 10.253.253.253
Powinien wyglądać tak:
ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253
Następnie wykonaj:
Powinno działać.
źródło
16.04
, Docker17.03.1-ce
.16.04
Docker17.09.0-ce
i to nie działaW moim przypadku, ze
docker version 1.13.0
idocker-machine 0.9.0
podUbuntu 16.04
musiałem zmodyfikować nieco odpowiedź Tanzaho'S (2. Modyfikacja Docker config) w następujący sposób:Zaloguj się do Ubuntu jako użytkownik z uprawnieniami sudo.
Otwórz plik / etc / default / docker do edycji:
Dodaj następujące ustawienie dla platformy Docker.
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Zapisz i zamknij plik.
Zrestartuj demona Dockera:
źródło
Na wypadek, gdyby ktoś to czytał, używając docker-compose. Udało mi się rozwiązać ten problem, zmieniając plik yaml w następujący sposób
version: 3.4 service: my-app build: context: . network: host
co jest równoznaczne z pisaniem
źródło
Dla mnie nie mogłem zainstalować pip z powodu nieprawidłowego skonfigurowania DNS dockera. Wypróbowałem powyższe kroki, jednak konfiguracja Dockera DNS na Google DNS nie działa na moim laptopie. DNS Dockera można poprawnie skonfigurować tylko wtedy, gdy ustawię jego DNS na adres IP przypisany do mojego laptopa.
Jeśli używasz Ubuntu, możesz wykonać następujące kroki, aby skonfigurować DNS swojego dockera:
Sprawdź przypisany adres IP urządzenia. Możesz to znaleźć w obu
ifconfig
nmcli dev show | grep 'DNS'
Edytuj dns w
/etc/docker/daemon.json
(utwórz ten plik, jeśli wcześniej nie istniał){ "dns": ["your_ip_in_step_1"] }
Uruchom ponownie okno dokowane:
sudo service docker restart
źródło
Jako nowicjusz Dockera miałem problem, który objawiał się w ten sposób, gdy korzystałem z samouczka dla Dockera pod adresem:
https://docs.docker.com/get-started/part2
Używam Dockera 17.03.1-ce w firmowej sieci LAN.
Sprawdziłem i dwukrotnie sprawdziłem moje ustawienia DNS. Używałem różnych sposobów konfiguracji DNS, które znalazłem podczas moich wyszukiwań w Internecie. Niektóre powodowały błędy podczas uruchamiania. Podejście, które ostatecznie wybrałem do konfiguracji DNS, było takie, które zostało opisane w sekcji Rozwiązywanie problemów z systemem Linux w powyższym linku, gdzie DNS jest konfigurowany za pośrednictwem pliku daemon.json w katalogu / etc / docker.
Jednak nadal miałem ten sam problem. To, co ostatecznie rozwiązało dla mnie problem, to konfiguracja proxy poprzez zmienne środowiskowe http_proxy i https_proxy . Miałem je określone w moim pliku Dockerfile, ale zaniedbałem to zrobić przed poleceniem RUN pip.
Mimo że wydawało się, że jest to problem z DNS, przeniesienie tych poleceń ENV przed polecenie RUN miało dla mnie różnicę. Na wypadek, gdyby było to pomocne dla każdego, kto ma ten problem.
źródło
Nie znam przyczyny, ale błąd oznacza, że pip próbuje rozwiązać
/simple/blinker/
jako nazwę hosta DNS zamiastpypi.python.org
części, co wydaje się bardzo dziwne, ponieważ nie mogę nawet wymyślić żadnego adresu URL, dla któregourlparse
mógłby zwrócić taki ciąg jako nazwę hosta część. Sprawdzę, czy jest jakiś problem~/.pip/pip.conf
źródło
Miałem ten sam problem Przyczyną błędu jest proxy.
Więc edytuję następujący plik Dockerfile
RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port
źródło
W moim przypadku było to spowodowane połączeniem z siecią VPN mojej uczelni. Odłączenie „rozwiązało” problem.
źródło
Konfiguracja Docker DNS na Google DNS (8.8.8.8) lub 10.0.0.2 nie działała w moim środowisku firmowym.
Bieganie: $ drill @ 8.8.8.8 www.amazon.com lub @ 10.0.0.2 potwierdziły to.
Aby znaleźć działający DNS, uruchomiłem: $ drill www.amazon.com i dostałem adres IP DNS, który jest używany w mojej sieci.
Następnie ustawiłem go w Ubuntu, wykonując następujący krok, aby skonfigurować DNS dockera.
Zmieniono dns w /etc/docker/daemon.json
{ "dns": ["the DNS ip from step1"] } Restart docker: sudo service docker restart
źródło
Jestem nowy w Docker i wypróbowałem wszystkie wymienione tutaj metody, ale nadal nie udało mi się. Wersja Dockera to 18, a Ubuntu 16. Wypróbowałem tę metodę: - Najpierw budowałem docker z firmową siecią internetową. ta sieć blokuje niektóre witryny lub coś tutaj nie poszło dobrze. Po drugie połączyłem się z własną siecią (której używam na przykład w telefonie komórkowym) i spróbowałem. wszystko poszło dobrze. Require.txt została pomyślnie zainstalowana, a docker został skompilowany.
źródło
Pozwól mu działać. Czasami pypi ma problemy z połączeniem, które są hałaśliwie rzucane na twoją twarz, abyś pomyślał, że jest zepsuty. Dla pewności, pozwól mu się toczyć, może się okazać, że działa sam.
Najważniejsze, pomimo tych czerwonych linii błędów, brzmi „Zbudowano pomyślnie”
$ docker build . Sending build context to Docker daemon 2.048 kB Step 1 : FROM docker-registry.aws.example.com:5000/cmcrc/python2:20160517120608 ---> 1e5034711aa9 Step 2 : RUN pip install prometheus-client requests ---> Running in f3c580fc93ae Collecting prometheus-client Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8610>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d87d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8990>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8b50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8d10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Downloading prometheus_client-0.0.13.tar.gz Collecting requests Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9d4d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9da10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dc50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9de10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dfd0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Downloading requests-2.10.0-py2.py3-none-any.whl (506kB) Building wheels for collected packages: prometheus-client Running setup.py bdist_wheel for prometheus-client: started Running setup.py bdist_wheel for prometheus-client: finished with status 'done' Stored in directory: /root/.cache/pip/wheels/04/94/f5/b803b2ff65e8344e99ca99b7f7cb8194224017167809a32b78 Successfully built prometheus-client Installing collected packages: prometheus-client, requests Successfully installed prometheus-client-0.0.13 requests-2.10.0 ---> 19c5e3cfe08f Removing intermediate container f3c580fc93ae Successfully built 19c5e3cfe08f
źródło