Mik*_*ier 5 environment-variables docker dockerfile docker-compose
鉴于此.env
文件:
TEST=33333
Run Code Online (Sandbox Code Playgroud)
鉴于此docker-compose.yml
文件:
service_name:
image: test
env_file: .env
environment:
TEST: 22222
Run Code Online (Sandbox Code Playgroud)
鉴于此Dockerfile
文件:
FROM an_image AS builder
FROM another_image
ENV TEST 11111
CMD ["/bin/echo $TEST"]
Run Code Online (Sandbox Code Playgroud)
每当我在容器中构建并运行此图像时,它都会打印出来11111
.
如果我ENV 11111
从Dockerfile中删除该行,我的TEST
环境变量为空...
父图像是接收环境变量而不是子图像?
谢谢!
编辑:
ENV TEST ${TEST}
不起作用($ TEST为空)ENV TEST
不起作用($ TEST为空)所以这不是一个多阶段的问题.
看来ENV
变量仅在运行containers(docker-compose up
)时使用.不是在构建时(docker-compose build
).所以你必须使用arguments
:
.env:
TEST=11111
Run Code Online (Sandbox Code Playgroud)
docker-compose.yaml:
version: '3'
services:
test:
build:
context: .
args:
TEST: ${TEST}
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM nginx:alpine
ARG TEST
ENV TEST ${TEST}
CMD ["sh", "-c", "echo $TEST"]
Run Code Online (Sandbox Code Playgroud)
测试命令:
docker rmi test_test:latest ; docker-compose build && docker run -it --rm test_test:latest
Run Code Online (Sandbox Code Playgroud)
说真的,文档有点缺乏.
参考:https://github.com/docker/compose/issues/1837
问题不在于具体的多阶段。
这是关于 DockerfileARG
和docker -compose YAML build
args
(“构建参数”)之间的差异;和 Dockerfile 和 docker ENV
-compose YAML environment
/ .env
。
args
添加构建参数,它们是只能在构建过程中访问的环境变量。
从简单开始,只显示Dockerfile
和 YAML之间的交互:
ARG buildno
ARG gitcommithash
RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"
Run Code Online (Sandbox Code Playgroud)
build:
context: .
args:
buildno: 1
gitcommithash: cdc3b19
build:
context: .
args:
- buildno=1
- gitcommithash=cdc3b19
Run Code Online (Sandbox Code Playgroud)
请参阅此线程中的另一个答案。
我建议从 Dockerfile 抽象级别开始,向上。在添加下一层抽象之前,请确保您了解每一层。
Dockerfile(然后使用 Dockerfile 运行容器...使用 default ENV
,然后使用--env
,然后使用ARG
和--build-arg
)
然后添加 docker-compose 详细信息,并使用它们。
然后循环回到 Dockerfiles 并了解多阶段构建。
一篇有用的博客文章——关注 Dockerfile,但在所有情况下,最好先单独了解 Dockerfile,然后再添加额外的抽象层,例如 docker-compose YAML。
https://vsupalov.com/docker-arg-env-variable-guide/
然后 docker-compose 官方文档:
归档时间: |
|
查看次数: |
4141 次 |
最近记录: |