在Dockerbuild文件中使用docker-compose envvariables

有以下docker组成文件:

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

是否有任何方式使用docker-compose.yml中声明的envvariables(作为环境或在env_file中声明)作为Dockerfile的一部分,而无需在Dockerfile中声明它们? 像这样的东西:

 FROM java:7 ADD ${ENV}/data.xml /data/ CMD ["run.sh"] 

虽然这个问题早就被问到了,但是在这里也有一个类似的问题的答案: 在构build阶段将docker-compose的环境variables传递给容器

基本上,要在容器的构build时使用variables,必须在docker-compose.yml定义variables:

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

然后使用ARGDockerfile引用它:

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

关于*.env文件中定义的环境variables,我相信他们不能在构build时传递给容器。

这种做法违背了Docker和大多数DevOps方法背后的“构build一次,随处运行”的理论。 通过这种方法,您需要为您希望使用的每个环境构build一个容器。 通过这样做,您不能安全地说,如果一个容器在开发环境中工作,它将在分段和生产中工作,因为您不使用相同的容器。

你最好把你需要的所有configuration文件添加到容器中,并编写一个入口脚本,在容器启动时select/复制该环境的数据到正确的位置。 你也可以把这个方法应用到容器上的其他configuration上,比如使用jinja2模板等模板化的Apacheconfiguration。