Ich habe eine Dockerized-Anwendung, die ich in Proxy-und Nicht-Proxy-Host-Umgebungen ausführen möchte. Ich versuche, dieses Problem zu lösen, indem Sie die normalen Umgebungsvariablen wie http_proxy in die Container kopieren, wenn und nur wenn sie im Host vorhanden sind.Wie können Umgebungsvariablen für Docker RUN-Befehle von docker-compose bereitgestellt werden?
ich da 90% der Art und Weise bekommen
set | grep -i _proxy=>proxies.env
in einem Top-Level-Skript, indem ausgeführt wird, und dann, mit in meiner Docker-compose.yml:
myserver:
build: ./myserver
env_file:
- proxies.env
Diese kopiert Die Umgebungs-Proxy-Variablen des Hosts, falls vorhanden, in den Server-Container, und es funktioniert in dem Sinne, dass diese Variablen zur Laufzeit des Containers verfügbar sind, dh in der Phase, in der das Dockerfile CMD oder ENTRYPOINT ausgeführt wird.
Allerdings habe ich einen Container, der npm als Build-Schritt ausführen muss, dh von einem RUN-Befehl in der Dockerfile, und diese Variablen scheinen zu diesem Zeitpunkt nicht vorhanden zu sein, also kann npm den Proxy nicht finden und hängt . In anderen Arbeiten, wenn ich
RUN set
in meinem Dockerfile habe, kann ich keine Variablen von proxies.env sehen, aber wenn ich
docker exec -it myserver /bin/bash
tun und stellen Sie dann laufen, kann ich alles sehen von proxies.env.
Kann jemand eine Möglichkeit empfehlen, diese Variablen zur Container-Build-Zeit sichtbar zu machen, ohne sie hart codieren zu müssen, damit mein docker-compose.yml und Dockerfile immer noch für Hosts mit Proxies und Hosts ohne Proxies funktionieren?
(Laufen mit CentOS 7, Docker-komponieren 1.3.1 und 1.7.0 Docker)
Die Generierung Ihrer Docker-Datei mit den vordefinierten env-Variablen scheint mir der einfachste Weg zu sein. –
Sie können gut sein. In Ermangelung eines besseren Vorschlags werde ich ein Shell-Skript zusammenstellen, das sed verwendet, um die fest codierten NPM sed-Einstellungen zu füllen oder zu kommentieren, sodass ich dieselbe Docker-Datei sowohl für Cloud- als auch für Unternehmens-Hosts verwenden kann. –
Update: mit 'docker-compose.yml' Version 2 (Docker 1.10+) haben Sie jetzt eine bessere Option:' build:/args: '. Siehe [meine Antwort unten] (http://stackoverflow.com/a/36084324/6309) – VonC