尽管阅读了有关环境变量的Docker文档,但在理解变量替换方面还是有些困难。
这是我当前的docker-compose.yml
:
version: '3'
services:
web:
image: myimage:latest
environment:
FRONTEND_URL: http://mydomain
CALLBACK_URL: ${FRONTEND_URL}/callback
到目前为止,我的理解是我可以使用类似${FRONTEND_URL}
的东西,以便将CALLBACK_URL
插值到http://mydomain/callback
,但是在docker-compose up
之后,此服务具有以下环境值:
FRONTEND_URL: http://mydomain
CALLBACK_URL: /callback
因此,好像${FRONTEND_URL}
没有被取代。我在这里想念什么?
答案 0 :(得分:2)
您可以在.env
所在的同一文件夹中使用docker-compose.yml
文件。
.env
FRONTEND_URL=http://mydomain
docker-compose.yml
version: '3'
services:
web:
image: myimage:latest
environment:
FRONTEND_URL: ${FRONTEND_URL}
CALLBACK_URL: ${FRONTEND_URL}/callback
您可以使用.env
来代替export
文件。在docker-compose up
之前运行以下命令:
export FRONTEND_URL=http://mydomain
现在您可以使用此docker-compose.yml
:
version: '3'
services:
web:
image: myimage:latest
environment:
FRONTEND_URL: ${FRONTEND_URL}
CALLBACK_URL: ${FRONTEND_URL}/callback
如果未设置环境变量,则Compose替换为空字符串。在上面的示例中,如果未设置
POSTGRES_VERSION
,则图像选项的值为postgres:
。您可以使用
.env
file设置环境变量的默认值,Compose会自动寻找该默认值。在shell环境中设置的值会覆盖.env
文件中设置的值。来源: https://docs.docker.com/compose/compose-file/#variable-substitution