我可以在 docker-compose.yml
中指定一个参数,如下所示(例如 RAILS_ENV
)
version: '3'
services:
web:
build:
context: .
args:
RAILS_ENV: production
Dockerfile
使用此 ARG
并设置ENV
,以便使用该环境变量构建我的镜像:
FROM ruby:2.5.1
# ...
ARG RAILS_ENV
ENV RAILS_ENV=$RAILS_ENV
# ...
# Image contains environment variable `$RAILS_ENV` as `"production"`
但是,如果我想使用 "products"
的硬编码值以外的值怎么办?
有没有办法将变量动态传递到
docker-compose.yml
文件中?此外,如果我不传递任何内容,我可以在
docker-compose.yml
中指定默认值(例如development
)吗?
谢谢!
最佳答案
是的,你可以做到这一点。
首先,您需要使用变量创建 .env
(与您的 Dockerfile
位于同一位置):
RAILS_ENV=production
您没有将此文件提交到存储库(您应该将其添加到 .gitignore
)。
然后你就可以开始在Dockerfile
中使用它们:
version: '3'
services:
web:
build:
context: .
args:
RAILS_ENV: ${RAILS_ENV}
有两种方法可以定义变量的默认值:
${VARIABLE:-default} evaluates to default if VARIABLE is unset or empty in the environment. ${VARIABLE-default} evaluates to default only if VARIABLE is unset in the environment.
例如:
version: '3'
services:
web:
build:
context: .
args:
RAILS_ENV: ${RAILS_ENV:-development}
在此处了解更多信息:https://docs.docker.com/compose/compose-file/#variable-substitution
关于docker - 动态地将参数传入 `docker-compose.yml`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329477/