Ich folge der Anleitung zur Verwendung von Docker mit einer Python-Anwendung, aber wenn Docker den Befehl ausführt
RUN pip install -r requirements.txt
Ich erhalte die folgende Fehlermeldung:
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/
Dies wiederholt sich mehrmals und dann erhalte ich eine weitere Nachricht:
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))
Aus irgendeinem Grund kann pip nicht auf Pakete aus einem Docker-Container zugreifen. Muss ich etwas tun, um den Internetzugang zu ermöglichen?
Pip funktioniert jedoch einwandfrei, um Dinge außerhalb des Docker-Containers zu installieren, und funktioniert auch mit genau diesem Paket ( blinker==1.3
) einwandfrei, sodass dies nicht das Problem ist. Auch dieses Problem ist nicht spezifisch für dieses Paket. Ich bekomme das gleiche Problem mit jedem pip install
Befehl für jedes Paket.
Hat jemand eine Idee, was hier los ist?
docker run mycontainer pip install -r requirements.pip
außerhalb des Feigenkontexts versucht ? Trotzdem klingt es so, als wäre es ein Problem mit der Pip-Version. Für einige neuere Pip-Versionen müssen Sie daher beim Ausführen weitere Befehlszeilenoptionen angeben,pip install
damit bestimmte Pakete gefunden werden.FROM python:2.7
also die Version von Pip, die mit Python 2.7.9 geliefert wird. Ich habe nicht versucht, Pip-Befehle separat auszuführen, aber das liegt daran, dass ich den Container nicht einmal zum Erstellen bringen kann, da Pip nicht funktioniert. Ich könnte versuchen, einen leeren Python-Container zupip install --no-use-wheel --allow-all-external -r requirements.pip
oder wenn das nicht hilft, versuchen Sie espip install --no-use-wheel --allow-all-external --allow-unverified blinker -r requirements.pip
. Das hat bei mir in der Vergangenheit funktioniert, als ich einen ähnlichen Fehler hattepip install
. Sie können auch versuchen, diese Zeile aus der Docker-Datei zu entfernen und dann den Container ohne diese zu erstellen, um zu testen, ob der Befehl anschließend ausgeführt werden kann. Wie gesagt, ich denke nicht, dass das hier das Problem ist.Antworten:
Ihr Problem ist darauf zurückzuführen, dass Docker nicht den richtigen DNS-Server verwendet. Sie können das Problem auf drei verschiedene Arten beheben:
1. Hinzufügen von Google DNS zu Ihrer lokalen Konfiguration
Ändern Sie /etc/resolv.conf und fügen Sie am Ende die folgenden Zeilen hinzu
# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4
Wenn Sie weitere DNS-Server hinzufügen möchten, klicken Sie hier .
Diese Änderung ist jedoch nicht dauerhaft (siehe diesen Thread ). So machen Sie es dauerhaft:
$ sudo nano /etc/dhcp/dhclient.conf
Kommentieren Sie die Zeile aus und bearbeiten Sie sie mit dem vorangestellten Domain-Name-Server:prepend domain-name-servers 8.8.8.8, 8.8.4.4;
Starten Sie dhclient neu :
$ sudo dhclient
.2. Ändern der Docker-Konfiguration
Wie in den Dokumenten erklärt :
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. Verwenden Sie einen Parameter, wenn Sie Docker ausführen
Wenn Sie Docker ausführen, fügen Sie einfach den folgenden Parameter hinzu:
--dns 8.8.8.8
quelle
--dns
Flagge nur aufdocker
Befehl verfügbar . Ich kann noch kein Äquivalent für Docker-Compose finden.Ich musste --network = host zu meinem Docker-Build-Befehl hinzufügen:
quelle
Ich hatte das gleiche Problem und es plagte mich eine Weile und ich habe viele Lösungen online ausprobiert, aber ohne Erfolg. Ich habe es jedoch wie folgt gelöst:
Laufen:
Ubuntu 16.04 docker Server 18.03.0-ce
Ermitteln Sie die Adresse Ihres DNS-Servers.
Ermitteln Sie die Adresse Ihres DNS-Servers, indem Sie den folgenden Befehl ausführen:
$: nmcli dev show | grep 'IP4.DNS' IP4.DNS[1]: 192.168.210.2
Aktualisieren Sie den Docker-Daemon
Erstellen Sie eine Docker-Konfigurationsdatei unter
/etc/docker/daemon.json.
( falls Sie noch keine haben ) und fügen Sie der Datei den folgenden Inhalt hinzu:{ "dns": ["192.168.210.2", "8.8.8.8"] }
Das erste Element des Arrays ist der DNS-Server Ihres Netzwerks und das zweite ist der DNS-Server von Google als Ersatz, wenn das DNS Ihres Netzwerks nicht verfügbar ist.
Speichern Sie die Datei und starten Sie den Docker-Dienst neu
quelle
docker-ce
. Hinweis: Ich hatte die Datei nichtdaemon.json
. Wahrscheinlich wird diese Datei während der Installation nicht standardmäßig erstellt, und Sie müssen sie manuell erstellen.Das war die Lösung für mich:
quelle
docker-machine restart
und danndocker-machine env
(wie es mich dazu aufgefordert hatte) und das Problem behoben.Für mich hat es geholfen, den Docker-Daemon einfach neu zu starten.
quelle
Für Ubuntu-Benutzer
Sie müssen neue DNS-Adressen in der Docker-Konfiguration hinzufügen
Fügen Sie die DNS nach ExecStar hinzu.
--dns 10.252.252.252 --dns 10.253.253.253
Sollte so aussehen:
ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253
Dann mach:
Sollte arbeiten.
quelle
16.04
, Docker17.03.1-ce
.16.04
Docker17.09.0-ce
und das funktioniert nichtIn meinem Fall musste ich mit
docker version 1.13.0
unddocker-machine 0.9.0
unterUbuntu 16.04
Tanzahos Antwort (2. Ändern der Docker-Konfiguration) wie folgt leicht ändern:Melden Sie sich bei Ubuntu als Benutzer mit Sudo-Berechtigungen an.
Öffnen Sie die Datei / etc / default / docker zum Bearbeiten:
Fügen Sie die folgende Einstellung für Docker hinzu.
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Speichern und schließen Sie die Datei.
Starten Sie den Docker-Daemon neu:
quelle
Falls jemand dies mit Docker-Compose liest. Ich konnte dies beheben, indem ich meine yaml-Datei wie folgt änderte
version: 3.4 service: my-app build: context: . network: host
das ist gleichbedeutend mit Schreiben
quelle
Ich konnte pip nicht installieren, da das DNS des Dockers nicht richtig konfiguriert war. Ich habe die oben genannten Schritte ausgeführt. Die Konfiguration von Docker-DNS für Google DNS funktioniert jedoch nicht für meinen Laptop. Das DNS von Docker kann nur dann ordnungsgemäß konfiguriert werden, wenn ich das DNS auf die zugewiesene IP meines Laptops eingestellt habe.
Wenn Sie Ubuntu verwenden, können Sie die folgenden Schritte ausführen, um das DNS Ihres Dockers zu konfigurieren:
Finden Sie die zugewiesene IP Ihres Geräts heraus. Sie können dies entweder finden
ifconfig
nmcli dev show | grep 'DNS'
Bearbeiten Sie DNS in
/etc/docker/daemon.json
(erstellen Sie diese Datei, wenn sie vorher nicht existiert){ "dns": ["your_ip_in_step_1"] }
Docker neu starten:
sudo service docker restart
quelle
Als Docker-Neuling hatte ich ein Problem, das sich auf diese Weise manifestierte, als ich dem Tutorial für Docker unter folgender Adresse folgte:
https://docs.docker.com/get-started/part2
Ich verwende Docker 17.03.1-ce in einem Unternehmens-LAN.
Ich habe meine DNS-Einstellungen überprüft und doppelt überprüft. Ich hatte verschiedene Methoden zum Konfigurieren des DNS verwendet, die ich bei meinen Suchvorgängen im Internet gefunden hatte. Einige verursachten beim Start Fehler. Der Ansatz, den ich letztendlich für die Konfiguration des DNS gewählt habe, war der im Abschnitt Fehlerbehebung unter Linux des obigen Links oben, in dem der DNS über die Datei daemon.json im Verzeichnis / etc / docker konfiguriert wird.
Ich hatte jedoch immer noch das gleiche Problem. Was das Problem für mich schließlich löste, war die Konfiguration des Proxys über die Umgebungsvariablen http_proxy und https_proxy . Ich hatte sie in meiner Docker-Datei angegeben, aber ich habe es versäumt, dies vor dem Befehl RUN pip zu tun.
Obwohl es sich anscheinend um ein DNS-Problem handelte, machte das Verschieben dieser ENV-Befehle vor dem RUN-Befehl den Unterschied für mich. Für den Fall, dass dies für jemanden mit diesem Problem hilfreich ist.
quelle
Ich kenne den Grund nicht, aber der Fehler bedeutet, dass pip versucht, den
/simple/blinker/
als DNS-Hostnamen anstelle despypi.python.org
Teils aufzulösen , was sehr seltsam erscheint, da ich nicht einmal eine URL finden kann, für dieurlparse
eine solche Zeichenfolge als Hostname zurückgegeben werden könnte Teil. Ich würde prüfen, ob es ein Problem mit gibt~/.pip/pip.conf
quelle
Ich hatte das gleiche Problem. Die Fehlerursache ist Proxy.
Also bearbeite ich Dockerfile folgend
RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port
quelle
Für mich wurde es durch die Verbindung mit meinem Universitäts-VPN verursacht. Trennen "gelöst" das Problem.
quelle
Das Konfigurieren von Docker-DNS für Google DNS (8.8.8.8) oder 10.0.0.2 funktionierte in meiner Unternehmensumgebung nicht.
Laufen: $ drill @ 8.8.8.8 www.amazon.com oder @ 10.0.0.2 haben dies bestätigt.
Um ein DNS zu finden, das funktionieren würde, habe ich Folgendes ausgeführt: $ fill www.amazon.com und es gab mir die DNS-IP, die in meinem Netzwerk verwendet wird.
Dann habe ich es in Ubuntu mit dem folgenden Schritt eingestellt, um das DNS des Dockers zu konfigurieren.
DNS in /etc/docker/daemon.json geändert
{ "dns": ["the DNS ip from step1"] } Restart docker: sudo service docker restart
quelle
Ich bin neu bei Docker und habe alle hier genannten Methoden ausprobiert, aber immer noch nicht richtig verstanden. Die Docker-Version war 18 und die Ubuntu-Version 16. Ich habe diese Methode ausprobiert: - Zuerst habe ich Docker mit dem Internet-Netzwerk des Unternehmens erstellt. Dieses Netzwerk blockiert einige Websites oder einige, wie die Dinge hier nicht gut liefen. Also habe ich mich zweitens mit meinem eigenen Netzwerk verbunden (das ich zum Beispiel im Handy benutze) und es versucht. Dinge gingen richtig. request.txt wurde erfolgreich installiert und Docker wurde erstellt.
quelle
Lass es laufen. Manchmal hat Pypi Verbindungsprobleme, die lautstark in Ihr Gesicht treten, um Sie glauben zu lassen, dass es kaputt ist. Nur um sicher zu gehen, lassen Sie es rollen, Sie werden vielleicht feststellen, dass es für sich selbst funktioniert.
Das Endergebnis lautet trotz dieser roten Fehlerzeilen "Erfolgreich erstellt".
$ 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
quelle