【问题标题】:how to use environment variable in docker-compose child Dockerfile FROM clause如何在 docker-compose 子 Dockerfile FROM 子句中使用环境变量
【发布时间】:2021-03-15 06:42:16
【问题描述】:

我正在使用 docker-compose 来构建一些 dockerfile。我正在使用环境变量$IMAGE_TAG 来标记图像

  game-client:
    image: 09809809.dkr.ecr.us-east-1.amazonaws.com/crashgiants-web:${IMAGE_TAG}
    build:
      context: ..
      dockerfile: devops/client.Dockerfile
      args:
        - IMAGE_TAG=${IMAGE_TAG}
        - SIGNALHUB_HOST=crashgiants.io
        - SOCKETIO_HOST=crashgiants.io
        - TURNSERVER_HOST=crashgiants.io
        - ASSET_HOST=crashgiants.io
    ports:
      - "80:80"

我有一个带有 FROM 子句的 dockerfile client.Dockerfile,例如:

FROM 0809809708.dkr.ecr.us-east-1.amazonaws.com/crashgiants:$IMAGE_TAG as game-base

我可以将环境变量获取到docker-compose ok,但不确定如何在子client.Dockerfile中使用它

我正在调用撰写文件:IMAGE_TAG=local_tester docker-compose -f ./devops/docker-compose.yml build

这当前会引发错误

Building game-client

Traceback (most recent call last):
  File "compose/cli/main.py", line 67, in main
  File "compose/cli/main.py", line 126, in perform_command
  File "compose/cli/main.py", line 302, in build
  File "compose/project.py", line 468, in build
  File "compose/project.py", line 450, in build_service
  File "compose/service.py", line 1147, in build
compose.service.BuildError: (<Service: game-client>, {'message': 'No build stage in current context'})

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "docker-compose", line 3, in <module>
  File "compose/cli/main.py", line 78, in main
TypeError: can only concatenate str (not "dict") to str
[95080] Failed to execute script docker-compose

关于can only concatenate str (not "dict") to str的一些事情

【问题讨论】:

    标签: docker docker-compose environment-variables dockerfile


    【解决方案1】:

    修改你的dockerfile如下:

    ARG IMAGE_TAG=latest
    FROM 0809809708.dkr.ecr.us-east-1.amazonaws.com/crashgiants:$IMAGE_TAG as game-base
    ARG IMAGE_TAG
    

    这会将IMAGE_TAG 作为参数公开给图像。第二个ARG IMAGE_TAG 是如果您想在映像构建中使用参数,因为FROM 之前的参数将在不同的上下文中。

    【讨论】:

    • 为什么要设置ARG IMAGE_TAG=latest?不会将其硬编码为latest 我希望它从docker-compose build 环境中传入。
    猜你喜欢
    • 2019-09-11
    • 2019-12-18
    • 2015-06-17
    • 2021-08-06
    • 2019-07-26
    • 1970-01-01
    • 2019-11-21
    • 2018-10-12
    • 2022-06-10
    相关资源
    最近更新 更多