2015-03-25 6 views
10

mit folgenden Docker-compose Datei:Verwenden Docker-komponieren env Variable in Dockerbuild

db: 
    build: . 
    environment: 
     - MYSQL_ROOT_PASSWORD=password 
     - ENV=test 
    env_file: .env 

Gibt es eine Möglichkeit, die env Variablen in Docker-compose.yml (entweder als Umwelt oder erklärt erklärt die Verwendung in die env_file) als Teil von Dockerfile, ohne sie in der Dockerfile zu deklarieren? So etwas wie das:

+0

das wäre wirklich nützlich. – Greg

+0

Nein, das ist nicht möglich. Es wäre dieser Frage zur Verwendung von Umgebungsvariablen vom Host sehr ähnlich: http://stackoverflow.com/questions/27925006/using-host-environment-variables-with-dockerfile –

+0

Hab es, danke. – ecyshor

Antwort

4

Dieser Ansatz geht gegen die Theorie "build once, run anywhere" hinter Docker und den meisten DevOps-Ansätzen. Bei diesem Ansatz müssen Sie einen Container für jede Umgebung erstellen, die Sie verwenden möchten. Auf diese Weise können Sie nicht sicher sagen, dass ein Container in der Entwicklungsumgebung funktioniert, wenn er in der Bereitstellung und Produktion verwendet wird, da Sie nicht denselben Container verwenden.

Sie sollten besser alle Konfigurationsdateien hinzufügen, die Sie benötigen, in den Container schreiben und ein entrypoint-Skript schreiben, das die Daten für diese Umgebung an den richtigen Speicherort auswählt/kopiert, wenn der Container startet. Sie können auch diesen Ansatz auf andere Config auf den Behälter, wie Templat Apache config jinja2 Vorlagen usw. anwenden

7

Obwohl diese Frage schon vor langer Zeit gefragt wurde, gibt eine Antwort auf eine ähnliche Frage ist hier: Pass environment variables from docker-compose to container at build stage

Grundsätzlich bei dem Build-Variablen zu verwenden Zeit des Behälters hat man die Variable in docker-compose.yml zu definieren:

build: 
    context: . 
    args: 
    MYSQL_ROOT_PASSWORD: password 
    ENV: test 

und dann auf Verweis in dem Dockerfile Verwendung ARG:

ARG MYSQL_ROOT_PASSWORD 
ARG ENV 
ADD ${ENV}/data.xml /data/ 

In Bezug auf Umgebungsvariablen, die in einer *.env-Datei definiert sind, glaube ich, dass sie zum Zeitpunkt der Erstellung nicht an den Container übergeben werden können.

+0

Vielen Dank! Genau das habe ich gesucht. –

+0

Können diese 'args' in' env_file: .env' anstelle von docker-compose definiert und in Dockefile auf ähnliche Weise wie oben erwähnt erkannt werden? – JavaSa