代码之家  ›  专栏  ›  技术社区  ›  Robert Strauch

docker compose中的ENV变量被替换为空字符串

  •  0
  • Robert Strauch  · 技术社区  · 6 年前

    虽然阅读了关于环境变量的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 回复  |  直到 6 年前
        1
  •  3
  •   Community Mohan Dere    6 年前

    你可以用 .env 文件位于同一文件夹a中 docker-compose.yml .

    埃文先生

    FRONTEND_URL=http://mydomain
    

    docker撰写。yml

    version: '3'
    services:
      web:
        image: myimage:latest
        environment:
          FRONTEND_URL: ${FRONTEND_URL}
          CALLBACK_URL: ${FRONTEND_URL}/callback
    

    enter image description here


    而不是使用 埃文先生 你可以使用的文件 export 。请在之前运行此命令 docker-compose up :

    export FRONTEND_URL=http://mydomain
    

    现在你可以用这个了 docker撰写。yml :

    版本:“3”
    服务:
    网状物:
    图片:myimage:最新
    环境:
    前端URL:${FRONTEND_URL}
    CALLBACK_URL:${FRONTEND_URL}/CALLBACK
    

    如果未设置环境变量,请用空字符串替换。在上面的例子中,如果 POSTGRES_VERSION 如果未设置,则图像选项的值为 postgres: .

    可以使用 .env file ,它会自动查找。在shell环境中设置的值将覆盖在 埃文先生 文件

    资料来源: https://docs.docker.com/compose/compose-file/#variable-substitution