ecy*_*hor 18 docker docker-compose
拥有以下docker-compose文件:
db:
build: .
environment:
- MYSQL_ROOT_PASSWORD=password
- ENV=test
env_file: .env
Run Code Online (Sandbox Code Playgroud)
有没有办法使用docker-compose.yml中声明的env变量(作为环境或在env_file中声明)作为Dockerfile的一部分而不在Dockerfile中声明它们?像这样的东西:
FROM java:7
ADD ${ENV}/data.xml /data/
CMD ["run.sh"]
Run Code Online (Sandbox Code Playgroud)
Dan*_*kov 20
它可以这样工作:
docker-compose.yml
version: '3.5'
services:
container:
build:
context: .
args:
ENV: ${ENV} # from .env file
env_file:
- .env
Run Code Online (Sandbox Code Playgroud)
文件
# from compose args
ARG ENV
ADD ${ENV}/data.xml /data/
Run Code Online (Sandbox Code Playgroud)
.env
ENV=myenv
Run Code Online (Sandbox Code Playgroud)
因此所有值都取自 .env 文件
Bar*_*Naz 17
虽然很久以前就提出了这个问题,但这里有一个类似问题的答案:在构建阶段将docker-compose中的环境变量传递给容器
基本上,要在容器的构建时使用变量,必须在以下位置定义变量docker-compose.yml:
build:
context: .
args:
MYSQL_ROOT_PASSWORD: password
ENV: test
Run Code Online (Sandbox Code Playgroud)
然后在Dockerfile使用中引用它ARG:
ARG MYSQL_ROOT_PASSWORD
ARG ENV
ADD ${ENV}/data.xml /data/
Run Code Online (Sandbox Code Playgroud)
关于*.env文件中定义的环境变量,我认为它们不能在构建时传递给容器.
| 归档时间: |
|
| 查看次数: |
10964 次 |
| 最近记录: |