gpt4 book ai didi

多阶段构建中的Docker环境变量

转载 作者:行者123 更新时间:2023-12-04 16:57:58 24 4
gpt4 key购买 nike

给定这个.env文件:

TEST=33333

给定这个 docker-compose.yml文件:
  service_name:
image: test
env_file: .env
environment:
TEST: 22222

给定这个 Dockerfile文件:
FROM an_image AS builder

FROM another_image
ENV TEST 11111

CMD ["/bin/echo $TEST"]

每当我在容器中构建并运行此镜像时,它都会输出 11111

如果我从Dockerfile中删除 ENV 11111行,则我的 TEST环境变量为空...

父图像是否接收到环境变量,而子图像是否接收到环境变量?

谢谢!

编辑:
  • 尝试ENV TEST ${TEST}不起作用($ TEST为空)
  • 删除ENV TEST不起作用($ TEST为空)
  • 最佳答案

    因此,这不是一个多阶段的问题。

    看来ENV变量仅在运行容器(docker-compose up)时使用。不在构建时(docker-compose build)。因此,您必须使用arguments:

    .env :

    TEST=11111

    docker-compose.yaml :
    version: '3'
    services:
    test:
    build:
    context: .
    args:
    TEST: ${TEST}

    Dockerfile :
    FROM nginx:alpine
    ARG TEST
    ENV TEST ${TEST}
    CMD ["sh", "-c", "echo $TEST"]

    测试命令:
    docker rmi test_test:latest ; docker-compose build && docker run -it --rm test_test:latest

    严重的是,缺少文档。

    引用: https://github.com/docker/compose/issues/1837

    关于多阶段构建中的Docker环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165108/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com