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

时间:2017-12-05 17:17:43

标签: docker docker-compose

我有以下条目文件

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命令。怎么了?

1 个答案:

答案 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 )。

相关问题