我试图通过.env文件将某些主机的环境变量内容作为args传递给docker-compose文件。但是变量被解释为字符串。
关注我文件的内容:
.env:
USER=$USER
UID=$UID
GID=$GID
docker-compose.yml:
version: "2"
services:
opencv_python:
build:
args:
- username=${USER}
- uid=${UID}
- gid=${GID}
context: .
dockerfile: opencv_base.Dockerfile
container_name: ocv-data-augmentation
image: ocv-data-augmentation
environment:
DISPLAY: $DISPLAY
QT_X11_NO_MITSHM: 1
volumes:
- "../project:/home/&{USER}/data_augmentation/" # Host : Container
- "/tmp/.X11-unix:/tmp/.X11-unix"
tty: true
这是命令docker-compose config
的输出:
services:
opencv_python:
build:
args:
gid: $$GID
uid: $$UID
username: fsalvagnini
context: /home/fsalvagnini/Documents/containers/data_augmentation/dockerfiles
dockerfile: opencv_base.Dockerfile
container_name: ocv-data-augmentation
environment:
DISPLAY: :1
QT_X11_NO_MITSHM: 1
image: ocv-data-augmentation
tty: true
volumes:
- /home/fsalvagnini/Documents/containers/data_augmentation/project:/home/&{USER}/data_augmentation:rw
- /tmp/.X11-unix:/tmp/.X11-unix:rw
version: '2.0'
答案 0 :(得分:1)
如果您需要使用.env文件并假设已定义所有env变量,则只需执行以下步骤:
.env文件
Column5
上面的语句将获取source .env
中定义的所有变量,因此docker-compose可以访问env变量。
仅此而已,您还应该查看.env
,以防万一需要传递默认值。
更多文档here
答案 1 :(得分:0)
在多个文件中设置相同的环境变量时, Compose用于选择要使用的值的优先级:
- 撰写文件
- Shell环境变量
- 环境文件
- Dockerfile
- 未定义变量
因此,如果未设置shell环境变量,则将使用env文件。
对于您的情况,如果需要使用shell env var,则无需创建.env
文件。要解决您的问题,您需要在调用docker-compose
之前导出变量。
export GID
export UID
export DISPLAY
docker-compose config
输出:
services:
opencv_python:
build:
args:
gid: '20'
uid: '501'
username: enix
context: /Users/enix/source/devops/stackoverflow
dockerfile: opencv_base.Dockerfile
container_name: ocv-data-augmentation
environment:
DISPLAY: :1
QT_X11_NO_MITSHM: 1
image: ocv-data-augmentation
tty: true
volumes:
- /Users/enix/source/devops/project:/home/&{USER}/data_augmentation:rw
- /tmp/.X11-unix:/tmp/.X11-unix:rw
version: '2.0'