如何在我的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 )时,这不会影响您可见的环境。