在Dockerfile或docker compose中定义环境变量?
在阅读之后,我决定用环境变量覆盖包含默认值的配置文件 我有3个在Dockerfile或docker compose中定义环境变量?,docker,docker-compose,environment-variables,dockerfile,12factor,Docker,Docker Compose,Environment Variables,Dockerfile,12factor,在阅读之后,我决定用环境变量覆盖包含默认值的配置文件 我有3个Dockerfiles,一个用于API,一个用于前端,一个用于工人。我有一个docker compose.yml来运行这3个服务和一个数据库 现在我想知道是应该在Dockerfiles还是dockercompose.yml中定义环境变量?使用一个与另一个有什么区别?请参阅: 您可以使用“environment”键在服务容器中设置环境变量,就像docker run-e VARIABLE=VALUE一样 此外,还可以在dockerfile
Dockerfile
s,一个用于API,一个用于前端,一个用于工人。我有一个docker compose.yml
来运行这3个服务和一个数据库
现在我想知道是应该在Dockerfile
s还是dockercompose.yml
中定义环境变量?使用一个与另一个有什么区别?请参阅:
您可以使用“environment”键在服务容器中设置环境变量,就像docker run-e VARIABLE=VALUE一样
此外,还可以在dockerfile中使用来定义环境变量
区别在于:
app:
environment:
- http_proxy=http://123
Dockerfile
中的环境变量define不仅将在docker build
中使用,还将保存到容器中。这意味着,如果在docker运行时未设置-e
,它仍将具有与Dockerfile
中定义的相同的环境变量
而环境变量定义在docker compose.yaml
中,仅用于docker run
也许下一个例子可以让您更清楚地理解:
Dockerfile:
FROM alpine
ENV http_proxy http://123
docker compose.yaml:
app:
environment:
- http_proxy=http://123
如果在Dockerfile
中定义环境变量,则使用此图像的所有容器也将http\u代理
设置为http://123
。但实际情况可能是,当你构建图像时,你需要这个代理。但是,其他人运行的容器可能不需要此代理,或者只是有另一个http_代理,因此他们必须删除entrypoint中的http_代理
,或者只是在docker compose.yaml中更改为另一个值
如果您在docker compose.yaml
中定义了环境变量,那么用户可以在执行docker compose时选择自己的http_代理,http\u proxy
如果用户未配置它,则不会设置docker compose.yaml
谢谢,因此我可以在Dockerfile中定义它,如果需要,它可以在docker-compose.yml中重写。如果我理解正确,是的,在Dockerfile
中定义不仅会影响docker构建
,还会影响docker运行
,在docker compose
中定义可以覆盖docker run
。