如何在我的CMD脚本中设置envvariables
我有以下入口文件
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
如果我然后启动图像,我进入docker,我不会find我的envvariables集:
docker-compose up --force-recreate -d docker-compose run my_node bash root@9c081bedde65:/# echo ${QNAMAKER_SUB_KEY} <empty>
我宁愿通过我的脚本代替ENV
Dockerfile命令来设置我的variables。 怎么了?
这里有一些事情正在进行。
首先, docker-compose run
不会在您使用docker-compose up
启动的容器内运行命令。 它启动一个新的容器来运行一次性命令。 你可能想要docker-compose exec
。
使用docker-compose run
,你看不到这个variables的原因是你在docker-compose run
命令行上提供了一个新的命令( bash
)来覆盖你的CMD
。
你可以考虑:
- 在
Dockerfile
使用ENV
语句。 - 在您
docker-compose.yml
使用environment
密钥
前者将信息embedded到图像中,而后者则意味着如果未在docker-compose.yaml
文件中明确设置该variables(或在docker-compose.yaml
docker run
命令行中使用-e
,则该variables将被取消设置。
您可以使用ENTRYPOINT
脚本完成您的目标并设置值,但是在使用docker exec
(或docker-compose exec
)时,这不会影响您可见的环境。