首页 > 解决方案 > 如何在 docker-compose 子 Dockerfile FROM 子句中使用环境变量

问题描述

我正在使用 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"

我有一个client.Dockerfile带有FROM如下子句的 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

标签: dockerdocker-composeenvironment-variablesdockerfile

解决方案


修改你的 dockerfile 如下:

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

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


推荐阅读