繁体   English   中英

在Dockerfile或docker-compose中定义环境变量?

[英]Define environment variable in Dockerfile or docker-compose?

读取12因子应用程序配置点后,我决定使用环境变量覆盖包含默认值的配置文件。

我有3个Dockerfile ,一个用于API,一个用于前端,一个用于工作人员。 我有一个docker-compose.yml来运行这3个服务以及一个数据库。

现在我想知道是否应该在Dockerfiledocker-compose.yml定义环境变量? 使用一种而不是另一种有什么区别?

看到这个

您可以使用'environment'键在服务的容器中设置环境变量,就像docker run -e VARIABLE = VALUE ...

另外,您可以在dockerfile中使用ENV定义环境变量。

区别在于:

Dockerfile定义的环境变量不仅将在Dockerfile docker build ,还将持久化到容器中。 这意味着,如果您在Dockerfile docker run时未设置-e ,它将仍然具有与Dockerfile定义的相同的环境变量。

而在docker-compose.yaml定义的环境变量仅用于docker-compose.yaml docker run

也许下一个示例可以使您更清楚地了解:

Dockerfile的

FROM alpine
ENV http_proxy http://123

docker-compose.yaml:

app:
  environment:
    - http_proxy=http://123

如果您在Dockerfile定义环境变量, Dockerfile此映像使用的所有容器也将具有http_proxy作为http://123 但是实际情况可能是在构建映像时需要此代理。 但是,该容器可能是由其他人运行的,可能不需要此代理或仅具有另一个http_proxy,因此他们必须在入口点中删除http_proxy或仅在docker-compose.yaml更改为另一个值。

如果您在docker-compose.yaml定义环境变量,则用户可以docker-compose.yaml docker-compose up时选择自己的http_proxy,如果用户未配置docker-compose.yaml ,则不会设置http_proxy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM