Wie führst du `apt-get` in einer Dockerdatei hinter einem Proxy aus?
Ich arbeite mit einer virtuellen Maschine (Ubuntu 13.10) mit docker (version 0.8.1, build a1598d1). Ich versuche zu bauen, ein Bild mit einem dockerfile. Zuerst möchte ich um die Pakete zu aktualisieren (mithilfe des folgenden code - hier wird der proxy verschleiert), aber apt-get
mal raus mit der Fehlermeldung: Could not resolve 'archive.ubuntu.com'
.
FROM ubuntu:13.10
ENV HTTP_PROXY <HTTP_PROXY>
ENV HTTPS_PROXY <HTTPS_PROXY>
RUN export http_proxy=$HTTP_PROXY
RUN export https_proxy=$HTTPS_PROXY
RUN apt-get update && apt-get upgrade
Habe ich auch das folgende in das host-system:
sudo HTTP_PROXY=http://<PROXY_DETAILS>/docker -d &
Dem host ausführen können, können apt-get
ohne Problem.
Wie kann ich das ändern das dockerfile, um es zu erreichen, die ubuntu-Server von innerhalb des Containers?
Update
Lief ich den code in CentOS (änderung der FROM ubuntu:13.10
zu FROM centos
) und es funktionierte gut. Es scheint ein problem mit Ubuntu.
InformationsquelleAutor der Frage Christopher Louden | 2014-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE:
Haben Sie falsche groß-und Kleinschreibung von Variablen in der ENV. Richtig ist
http_proxy
. Ihr Beispiel sollte sein:oder
Alle Variablen angegeben, die in ENV sind vorangestellt, um jeden Befehl AUSFÜHREN. Jeder RUN-Befehl ist ausgeführt im eigenen container/Umwelt, so erbt es nicht die Variablen aus der vorherigen Befehle AUSFÜHREN!
Hinweis: Es gibt keine Notwendigkeit, rufen docker-daemon mit proxy für diese zu arbeiten, obwohl, wenn Sie möchten, ziehen Bilder etc. Sie müssen die proxy für die docker-Dämon zu. Sie können festlegen, proxy für daemon in
/etc/default/docker
in Ubuntu (wirkt sich nicht auf Container-Einstellung).Ebenfalls kann dies passieren, falls Sie führen Sie Ihre proxy-host (z.B. localhost, 127.0.0.1). Localhost auf dem host unterscheiden sich von localhost im container. In einem solchen Fall müssen Sie die Verwendung einer anderen IP-Adresse (wie 172.17.42.1) zu binden Sie Ihre proxy-oder, wenn Sie eine Bindung an 0.0.0.0, können Sie 172.17.42.1 anstelle von 127.0.0.1 für den Anschluss von container während
docker build
.Können Sie auch suchen hier ein Beispiel: Wie Sie die Neuerstellung der dockerfile schnell durch die Verwendung von cache?
InformationsquelleAutor der Antwort Jiri
Unter Einstellung im Dockerfile für mich funktioniert. Getestet habe ich in
CoreOS
Vagrant
undboot2docker
. Angenommen der proxy-port ist3128
In Centos:
In Ubuntu:
Vorsichtig sein, das format, einige haben http im es, manche nicht, manche mit single-Quote. wenn die IP-Adresse 192.168.0.193, dann die Einstellung:
In Centos:
In Ubuntu:
Wenn Sie brauchen, set proxy in coreos, zum Beispiel, ziehen Sie die-image -
InformationsquelleAutor der Antwort BMW
Können Sie die
--build-arg
option, wenn Sie möchten, bauen Sie mittels eines Dockerfile.Über einen link auf https://github.com/docker/docker/issues/14634 , finden Sie im Abschnitt "Bauen mit --build-arg mit mehreren HTTP_PROXY":
HINWEIS:
Auf Ihrem eigenen system, stellen Sie sicher, dass Sie die HTTP_PROXY und NO_PROXY Umgebungsvariable.
InformationsquelleAutor der Antwort zhanxw
vor jeder apt-get-Befehl in der Dockerfile Sie sollten, setzen Sie diese Zeile
Dont'f vergessen zu erstellen apt.conf in den gleichen Ordner, dass Sie die Dockerfileden Inhalt der apt.conf Datei sollte wie folgt sein:
wenn Sie Benutzername und Kennwort für die Verbindung zu Ihrem proxy dann die apt.conf sollte wie folgt:
Beispiel :
Wo die foo ist der Benutzername und bar ist das Passwort.
InformationsquelleAutor der Antwort Reza Farshi
Verwenden --build-arg in Kleinbuchstaben Umgebungsvariable:
InformationsquelleAutor der Antwort Gaetan
ich hatte das gleiche problem und fand ein weiteres kleines workaround:
ich habe einen provisioner Skript Hinzugefügt wird, bilden die docker build-Umgebung.
Im Skript habe ich eine Umgebungsvariable in Abhängigkeit von einer ping-check:
Dockerfile:
script.sh:
dies ist immer noch etwas grob, aber arbeitete für mich
InformationsquelleAutor der Antwort user3813609
Wenn Sie die Proxys richtig eingerichtet, und noch nicht auf das internet zugreifen, könnte es sein das der DNS-Auflösung. Überprüfen Sie
/etc/resolve.conf
auf dem host Ubuntu-VM. Wenn es enthältnameserver 127.0.1.1
das ist falsch.Führen Sie diese Befehle auf dem host Ubuntu-VM, um es zu beheben:
Nun
/etc/resolv.conf
sollten einen gültigen Wert für nameserver, welche kopiert werden sollen, indem Sie die docker-Containern.InformationsquelleAutor der Antwort wisbucky
Vorgeschlagen von anderen Antworten, die
--build-arg
kann die Lösung sein.In meinem Fall musste ich hinzufügen
--network=host
zusätzlich zu den--build-arg
Optionen.InformationsquelleAutor der Antwort user4780495
Wir tun ... wir
und am Ende der dockerfile ...
Diese, für jetzt (bis Andockfenster stellt build-env vars), ermöglicht die proxy-env vars verwendet werden, für die NUR bauen, ohne dass diese
Die alternative zur Lösung ist NICHT zu bauen Ihre Bilder lokal hinter einem proxy, sondern lassen Andockfenster bauen Sie Ihre Bilder für Sie über das Andockfenster "automatisierte builds". Seit docker ist nicht die Bilder hinter Ihrem proxy das problem ist gelöst. Ein Beispiel eines automatisierten build verfügbar ist ...
https://github.com/danday74/docker-nginx-lua (GITHUB-repo)
https://registry.hub.docker.com/u/danday74/nginx-lua (DOCKER-repo, das ist gerade die github repo mit einer automatisierten build-und dabei ein docker build auf ein push zu dem github master branch)
InformationsquelleAutor der Antwort danday74
und Wenn Sie wollen proxy für wget sollte man diese Zeile in Ihrem Dockerfile
InformationsquelleAutor der Antwort Reza Farshi
Als Tim Töpfer wies darauf hin, Einstellung proxy im dockerfile ist schrecklich. Bei der Erstellung des Bildes, fügen Sie proxy für Ihr Unternehmensnetzwerk, sondern Sie kann eine Bereitstellung in der cloud oder in einer DMZ, wo es keine Notwendigkeit für das proxy oder proxy-server ist anders.
Können Sie auch teilen Sie Ihr Bild mit Personen außerhalb der corporate-n/w.
InformationsquelleAutor der Antwort Dhawal
Eine leichte alternative zu der Antwort von @Reza Farshi (funktioniert besser in meinem Fall) schreiben Sie die proxy-Einstellungen aus, um
/etc/apt/apt.conf
mitecho
über das Dockerfile z.B.:Der Vorteil dieses Ansatzes ist, dass die proxy-Adressen können übergeben werden dynamisch zur image-Erstellung Zeit, anstatt Sie zu kopieren die Datei mit den Einstellungen aus dem host.
z.B.
docker build --build-arg HTTP_PROXY=http://<host>:<port> --build-arg HTTPS_PROXY=http://<host>:<port> .
als pro docker build docs.
InformationsquelleAutor der Antwort Connor Goddard