Docker环境variables在多阶段构build中

给这个.env文件:

 TEST=33333 

给这个docker-compose.yml文件:

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

给这个Dockerfile文件:

 FROM an_image AS builder FROM another_image ENV TEST 11111 CMD ["/bin/echo $TEST"] 

每当我在一个容器中构build并运行这个图像,它就会打印11111

如果我从Dockerfile中删除ENV 11111行,我的TEST环境variables是空的…

父图像是否接收环境variables而不是子图像?

谢谢!

编辑:

  1. 尝试ENV TEST ${TEST}没有工作($ TEST是空的)
  2. 删除ENV TEST没有工作($ TEST是空的)

所以这不是一个多阶段的问题。

看起来ENVvariables只在运行容器时使用( docker-compose up )。 不在docker-compose build时( docker-compose build )。 所以你必须使用arguments

.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"] 

testing命令

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

严重的文件是有点缺乏。

参考: https : //github.com/docker/compose/issues/1837