Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何在我的CMD脚本中设置env变量_Docker_Docker Compose - Fatal编程技术网

Docker 如何在我的CMD脚本中设置env变量

Docker 如何在我的CMD脚本中设置env变量,docker,docker-compose,Docker,Docker Compose,我有下面的entryfile 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"] entry.sh文件如下所示: #!/bin/bash export QNAMAKER_SUB_KEY=b13615t 如果启动映像并输入docker,则找不

我有下面的entryfile

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"]
entry.sh文件如下所示:

#!/bin/bash
export QNAMAKER_SUB_KEY=b13615t
如果启动映像并输入docker,则找不到环境变量集:

docker-compose up --force-recreate -d
docker-compose run my_node bash

root@9c081bedde65:/# echo ${QNAMAKER_SUB_KEY}

<empty>
docker编写-强制重新创建-d
docker compose运行我的节点bash
root@9c081bedde65:/#echo${QNAMAKER_SUB_KEY}

我更喜欢通过脚本来设置变量,而不是使用
ENV
Dockerfile命令。怎么了

这里发生了几件事

首先,
docker compose run
不会在使用
docker compose up
启动的容器内运行命令。它启动一个新容器来运行一次性命令。您可能需要
docker compose exec

使用
docker compose run
时看不到该变量的原因是,通过在
docker compose run
命令行上提供新命令(
bash
)来覆盖
CMD

你可以考虑:

  • Dockerfile
    中使用
    ENV
    语句
  • 使用
    环境
    输入您的
    docker compose.yml
前者会将信息嵌入到图像中,而后者则意味着如果您没有在
docker compose.yaml
文件中明确设置变量(或在
docker run
命令行上使用
-e
),则该变量将被取消设置


您可以使用
ENTRYPOINT
脚本并在其中设置值来实现目标,但这不会影响您在使用
docker exec
(或
docker compose exec
)时看到的环境

首先,
docker compose run
不会在使用
docker compose up
启动的容器内运行命令。它启动一个新容器来运行一次性命令。您可能需要
docker compose exec

使用
docker compose run
时看不到该变量的原因是,通过在
docker compose run
命令行上提供新命令(
bash
)来覆盖
CMD

你可以考虑:

  • Dockerfile
    中使用
    ENV
    语句
  • 使用
    环境
    输入您的
    docker compose.yml
前者会将信息嵌入到图像中,而后者则意味着如果您没有在
docker compose.yaml
文件中明确设置变量(或在
docker run
命令行上使用
-e
),则该变量将被取消设置

您可以使用
ENTRYPOINT
脚本并在其中设置值来实现目标,但这不会影响使用
docker-exec
(或
docker-compose-exec
)时对您可见的环境

docker-compose up --force-recreate -d
docker-compose run my_node bash

root@9c081bedde65:/# echo ${QNAMAKER_SUB_KEY}

<empty>