在 Dockerfile 或 docker-compose 中定义环境变量?
Define environment variable in Dockerfile or docker-compose?
阅读 config point of the 12 factor app 后,我决定用环境变量覆盖包含默认值的配置文件。
我有 3 个 Dockerfile
,一个用于 API,一个用于前端,一个用于工人。我有一个 docker-compose.yml
到 运行 这 3 个服务加上一个数据库。
现在我想知道我是否应该在 Dockerfile
s 或 docker-compose.yml
中定义环境变量?使用一个而不是另一个有什么区别?
参见this:
You can set environment variables in a service’s containers with the 'environment' key, just like with docker run -e VARIABLE=VALUE ...
此外,您可以在docker文件中使用ENV来定义环境变量。
区别是:
在Dockerfile
中定义的环境变量不仅会在docker build
中使用,它还会持久化到容器中。这意味着如果您在 docker run
时没有设置 -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_proxy
作为 http://123
。但实际情况可能是当你构建镜像时,你需要这个代理。但是,其他人可能 运行 的容器可能不需要这个代理或者只有另一个 http_proxy,所以他们不得不删除入口点中的 http_proxy
或者只是更改 [= 中的另一个值17=].
如果在docker-compose.yaml
中定义了环境变量,那么在docker-compose up
时用户可以只选择自己的http_proxy,如果用户没有设置则不会设置http_proxy
配置它 docker-compose.yaml
.
阅读 config point of the 12 factor app 后,我决定用环境变量覆盖包含默认值的配置文件。
我有 3 个 Dockerfile
,一个用于 API,一个用于前端,一个用于工人。我有一个 docker-compose.yml
到 运行 这 3 个服务加上一个数据库。
现在我想知道我是否应该在 Dockerfile
s 或 docker-compose.yml
中定义环境变量?使用一个而不是另一个有什么区别?
参见this:
You can set environment variables in a service’s containers with the 'environment' key, just like with docker run -e VARIABLE=VALUE ...
此外,您可以在docker文件中使用ENV来定义环境变量。
区别是:
在Dockerfile
中定义的环境变量不仅会在docker build
中使用,它还会持久化到容器中。这意味着如果您在 docker run
时没有设置 -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_proxy
作为 http://123
。但实际情况可能是当你构建镜像时,你需要这个代理。但是,其他人可能 运行 的容器可能不需要这个代理或者只有另一个 http_proxy,所以他们不得不删除入口点中的 http_proxy
或者只是更改 [= 中的另一个值17=].
如果在docker-compose.yaml
中定义了环境变量,那么在docker-compose up
时用户可以只选择自己的http_proxy,如果用户没有设置则不会设置http_proxy
配置它 docker-compose.yaml
.