我可以在docker-compose.yml
中指定一个arg,如下所示(例如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"`
但是,如果我想使用"production"
的硬编码值以外的其他值怎么办?
是否可以将变量动态传递到docker-compose.yml
文件中?
此外,我可以在development
中指定默认值(例如docker-compose.yml
),以防万一我什么也没传递?
谢谢!
答案 0 :(得分:1)
是的,您可以这样做。
首先,您需要使用变量创建.env
(在与Dockerfile
相同的位置):
RAILS_ENV=production
您没有将此文件提交到存储库(应将其添加到.gitignore
)。
然后您可以在Dockerfile
中开始使用它们:
version: '3'
services:
web:
build:
context: .
args:
RAILS_ENV: ${RAILS_ENV}
有两种方法来定义变量的默认值:
如果未设置VARIABLE或$ {VARIABLE:-default}的值为默认值 在环境中是空的。 $ {VARIABLE-default}计算为默认值 仅在环境中未设置VARIABLE的情况下。
例如:
version: '3'
services:
web:
build:
context: .
args:
RAILS_ENV: ${RAILS_ENV:-development}
在此处了解更多信息:https://docs.docker.com/compose/compose-file/#variable-substitution