我有以下条目文件
FROM <image-of-nodejs>
COPY docker/node/entry.sh /var/entries/entry.sh
RUN apt-get update
RUN apt-get install ant -y
CMD ["/var/entries/entry.sh"]
图片由docker-compose文件使用:
version: "3.3"
services:
my_node:
build:
context: ./
dockerfile: docker/node/Dockerfile-build-dev
volumes:
- type: bind
source: ./
target: /var/proj
和entry.sh文件如下:
#!/bin/bash
export QNAMAKER_SUB_KEY=b13615t
如果我然后启动图像并进入泊坞窗,我就找不到我的env变量集:
docker-compose up --force-recreate -d
docker-compose run my_node bash
root@9c081bedde65:/# echo ${QNAMAKER_SUB_KEY}
<empty>
我更愿意通过我的脚本来设置我的变量来代替ENV
Dockerfile命令。怎么了?
答案 0 :(得分:2)
这里有几件事情。
首先,docker-compose run
不会在您使用docker-compose up
开始的容器内运行命令。它启动一个 new 容器来运行一次性命令。您可能需要docker-compose exec
。
使用docker-compose run
时没有看到变量的原因是您通过在CMD
命令上提供新命令(bash
)来覆盖docker-compose run
线。
您可以考虑:
ENV
。Dockerfile
语句
environment
docker-compose.yml
键
前者会将信息嵌入到您的图像中,而后者则意味着如果您未在docker-compose.yaml
文件中明确设置该变量(或使用-e
,则该变量将被取消设置docker run
命令行)。
您可以使用ENTRYPOINT
脚本并在那里设置值来实现目标,但这不会影响使用docker exec
时可见的环境(或docker-compose exec
)。