it-swarm.com.de

Können wir ENV-Variablen durch die cmd-Zeile übergeben, während wir über dockerfile ein Docker-Image erstellen?

Ich arbeite an einer Aufgabe, bei der ein Docker-Image mit centOs als Basis mit einem Dockerfile erstellt wird. Für einen der Schritte in der Docker-Datei müssen http_proxy und https_proxy ENV-Variablen festgelegt werden, um hinter dem Proxy zu funktionieren.

Da dieses Dockerfile von mehreren Teams mit unterschiedlichen Proxys verwendet wird, möchte ich vermeiden, dass das Dockerfile für jedes Team bearbeitet werden muss. Stattdessen suche ich nach einer Lösung, mit der ich ENV-Variablen zur Erstellungszeit übergeben kann, z.

Sudo Docker Build -e http_proxy = Somevalue.

Ich bin nicht sicher, ob es bereits eine Option gibt, die dies bietet. Vermisse ich etwas?

58
Aniketh

Container können mit build arguments (In Docker 1.9+) erstellt werden, die wie Umgebungsvariablen funktionieren.

Hier ist die Methode:

FROM php:7.0-fpm
ARG APP_ENV=local
ENV APP_ENV ${APP_ENV}
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini

und dann einen Produktionscontainer bauen:

docker build --build-arg APP_ENV=prod .

Für Ihr spezielles Problem:

FROM debian
ENV http_proxy ${http_proxy}

und dann laufen:

docker build --build-arg http_proxy=10.11.24.31 .

Wenn Sie Ihre Container mit docker-compose Erstellen, können Sie diese Build-Argumente in der Datei docker-compose.yml Angeben , jedoch nicht in der Befehlszeile. Sie können jedoch Variablensubstitution in der Datei docker-compose.yml Verwenden, die Umgebungsvariablen verwendet .

95
Sin30

Ich sah mich der gleichen Situation gegenüber.

Laut Sin30s Antwort verwendet die hübsche Lösung Shell,

CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
1
Tugrul