2015-04-14 6 views
6

Ich bin versucht, eine Entwicklungsumgebung hinter einem Unternehmens-Proxy-Server mit Docker einzurichten. Versuchen Sie es, ich kann den Andock-Container nicht mit dem Proxy-Server sprechen.apt-get in Docker hinter Organ-

Der Proxy-Server und apt-get funktionieren auf dem Host, die Ubuntu 12.04

Das erste, was in der Dockerfile getan ist versucht, die Proxy-Variablen einzurichten:

FROM ubuntu 
RUN echo 'Acquire::http { Proxy "http://my.proxy.net:8000"; };' >> /etc/apt/apt.conf.d/01proxy 
ENV HTTP_PROXY http://my.proxy.net:8000 
ENV http_proxy http://my.proxy.net:8000 
ENV HTTPS_PROXY https://my.proxy.net:8000 
ENV https_proxy https://my.proxy.net:8000 
RUN apt-get update && apt-get install -y build-essential 

Es zieht das Bild in Ordnung, legen sie die Variablen, aber wenn es apt-get update bekommt zu, versucht es für eine kleine Weile und dann irgendwie:

W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease 
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease 
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease 
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Could not resolve 'my.proxy.net' 
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Could not resolve 'my.proxy.net' 
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Could not resolve 'my.proxy.net' 
W: Some index files failed to download. They have been ignored, or old ones used instead. 

Diese Variablen I eingerichtet haben sind konsistent mit dem Host-Linux installieren (Ubuntu 12.04 auf VirtualBox, wenn diese Fragen)

ich auch haben/etc/default/Docker eingerichtet mit:

export http_proxy="http://my.proxy.net:8000" 
export http_proxy="https://my.proxy.net:8000" 

Irgendwelche Gedanken?

UPDATE:

Es sieht aus wie dies ein Problem mit DNS ist, die nicht unbedingt der Proxy-Server. Der Host /etc/resolve.conf enthält:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) 
#  DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 
nameserver 127.0.0.1 
search dhcp.mycompany.com 

Der Wirt ist ein virtualbox vm auf einem Windows 7-Box ausgeführt wird, und ich habe verschiedene unausgereifte Lösungen gefunden, die meist scheinen nicht zu funktionieren. Egal, was ich versuche, kann ich nicht bekommen sie den Hostnamen des Proxy-Servers

Antwort

6

Die Frage endete mit DNS zu sein. Docker läuft auf Ubuntu, welches selbst ein Gast-Betriebssystem auf VirtualBox ist. Aufgrund seiner eigenen virutalizing Hokuspokus, dazu auch einen Name-Server von 127.0.0.1 in resolv.conf.

Wenn dies geschieht, wird sich Docker (der Name-Server Google) eine DNS-Name-Server von 8.8.8.8 zugewiesen werden, da localhost zum Andockfensters Container bezieht sich nicht den Host.

Um dies zu beheben, ging ich den ganzen Weg aus, um Windows und lief

ipconfig /all 

Und bekam die IP-Adresse meines Laptops DNS-Server. Ich habe diese DOCKER_OPTS in der Konfigurationsdatei mit --dns = my.dns.ip.address und neu gestartet Docker und die anderen Maßnahmen, die ich über den Proxy nahm zu bekommen hat gut funktioniert.

2

Ein paar Kommentare zu lösen, nach my own experience:

  • stellen Sie sicher, eine HTTP-URL für https_proxy zu verwenden.
  • Verwendung Klein Proxy-Variablen in der Dockerfile itself
  • Verwendung beiden Fälle Proxy-Variablen in den docker profile (in meinem Fall war es in /var/lib/boot2docker/profile)
  • in allen Fällen, stellen Sie einen no_proxy/NO_PROXY Variable (bis .company,.sock,localhost,127.0.0.1,::1)
  • vergessen Sie nicht, die Anmeldeinformationen in der Proxy-uRL, wenn Ihre Proxy-Anforderung Authentifizierung umfassen.
0

zu der obigen Lösung hinzugefügt haben, können wir die folgenden Dinge in einem Container tun auch mit bekommen installieren

In VM apt-get, nach Docker Installation wenn durch die Verwendung hinter Proxy-Einstellungen Bilder in den Behälter läuft

docker laufen -IT ubuntu: 14,04

apt get-wget installieren

dieser Befehl wird nicht in der Lage Pakete von ziehen apt-get, das den Befehl unter

verwenden zu tun

Docker Lauf---net = host ubuntu: 14,04

export http_proxy = "proxy: port"

apt-get install wget

4

Wenn Sie hinter der Firewall bauen, müssen Sie Verwenden Sie Docker 1.9.x Build-Args.

Aufbau einer Dockerfile ohne die Build-args ausfällt und Blöcke wie folgt:

3b0d8aa7c417: Pull complete 
Digest: sha256:dc31e6056d314218689f028b51a58b2ca69b1dfdc5f33ead52b9351e9a19ee85 
Status: Downloaded newer image for nodesource/trusty:4.2.3 
---> e17bee681d8f 
Step 2 : RUN apt-get update 
---> Running in bdaf0006ccbd 

Apt-get Blöcke hier, weil es nicht Konnektivität hat mit archive.ubuntu.com ... Sie überprüfen können, dass durch das Bild läuft ...

# docker run -ti --net=host --rm nodesource/trusty:4.2.3 bash 
[email protected]:/usr/src/app# apt-get update 
0% [Connecting to archive.ubuntu.com (91.189.92.201)]^C 
[email protected]:/usr/src/app# ping archive.ubuntu.com 
PING archive.ubuntu.com (91.189.91.24) 56(84) bytes of data. 
^C 
--- archive.ubuntu.com ping statistics --- 
3 packets transmitted, 0 received, 100% packet loss, time 1999ms 

mit der Build-arg löst das Problem ....

# docker build -t migrator --build-arg http_proxy=$HTTP_PROXY . 

arg http_proxy=$HTTP_PROXY . 
Sending build context to Docker daemon 3.333 MB 
Step 1 : FROM nodesource/trusty:4.2.3 
---> e17bee681d8f 
Step 2 : RUN apt-get update 
---> Running in 019b32d09a77 
Ign http://archive.ubuntu.com trusty InRelease 
Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB] 
Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB] 
Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B] 
Get:4 http://archive.ubuntu.com trusty Release [58.5 kB] 
Get:5 http://archive.ubuntu.com trusty-updates/main Sources [326 kB] 
Get:6 http://archive.ubuntu.com trusty-updates/restricted Sources [5217 B] 
Get:7 http://archive.ubuntu.com trusty-updates/universe Sources [1