2017-11-07 8 views
1

gegeben, diese .env Datei:Docker Umgebungsvariablen in mehrstufigen baut

TEST=33333 

gegeben diese docker-compose.yml Datei:

service_name: 
    image: test 
    env_file: .env 
    environment: 
     TEST: 22222 

gegeben diese Dockerfile Datei:

FROM an_image AS builder 

FROM another_image 
ENV TEST 11111 

CMD ["/bin/echo $TEST"] 

Immer, wenn ich bauen und führen Sie dieses Bild in einem Container, es druckt 11111 .

Wenn ich die ENV 11111 Linie vom Dockerfile entfernen, meine TEST Umgebungsvariable leer ist ...

Ist das übergeordnete Bild die Umgebungsvariablen empfangen, aber nicht das Kind ein?

Danke!

EDIT:

  1. ENV TEST ${TEST} versucht hat nicht funktioniert ($ TEST ist leer)
  2. ENV TEST Entfernen nicht funktioniert ($ TEST ist leer)

Antwort

2

Das ist also kein mehrstufiges Problem.

Es erscheint ENV Variablen werden nur verwendet, wenn Container ausgeführt werden (docker-compose up). Nicht zur Erstellungszeit (docker-compose build). So haben Sie arguments verwenden:

.env:

TEST=11111 

Docker-compose.yaml:

version: '3' 
services: 
    test: 
    build: 
     context: . 
     args: 
     TEST: ${TEST} 

Dockerfile:

FROM nginx:alpine 
ARG TEST 
ENV TEST ${TEST} 
CMD ["sh", "-c", "echo $TEST"] 

Testbefehl:

docker rmi test_test:latest ; docker-compose build && docker run -it --rm test_test:latest 

Ernsthaft die Dokumentation etwas fehlt.

Referenz: https://github.com/docker/compose/issues/1837

+0

ich nicht in der Lage bin Ihr Problem zu reproduzieren, evaluieren Sie wirklich die Variable in einem 'CMD'? Das 'CMD' ist Laufzeit, keine Build-Zeit. – BMitch

Verwandte Themen