docker-compose中的环境变量被替换为空字符串

时间:2020-02-06 20:35:08

标签: docker docker-compose

尽管阅读了有关环境变量的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}没有被取代。我在这里想念什么?

1 个答案:

答案 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

enter image description here


您可以使用.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