作者:Pri_颖颖_773 | 来源:互联网 | 2023-01-09 19:08
鉴于此.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
.
如果我ENV 11111
从Dockerfile中删除该行,我的TEST
环境变量为空...
父图像是接收环境变量而不是子图像?
谢谢!
编辑:
尝试ENV TEST ${TEST}
不起作用($ TEST为空)
删除ENV TEST
不起作用($ TEST为空)
Mike Gleason..
9
所以这不是一个多阶段的问题.
看来ENV
变量仅在运行containers(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
1> Mike Gleason..:
所以这不是一个多阶段的问题.
看来ENV
变量仅在运行containers(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