how to set env variables in my CMD script

☆樱花仙子☆ 提交于 2020-01-06 05:30:10

问题


I have the following 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"]

the image is used by a docker-compose file:

version: "3.3"

services:
  my_node:
    build:
      context: ./
      dockerfile: docker/node/Dockerfile-build-dev
    volumes:
      - type: bind
        source: ./
        target: /var/proj

and the entry.sh file is the following:

#!/bin/bash
export QNAMAKER_SUB_KEY=b13615t

If I then start the image and I enter the docker, I won't find my env variable set:

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

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

<empty>

I would prefer to set my variables throug my script in place of the ENV Dockerfile command. What's wrong?


回答1:


There are a couple of things going on here.

First, docker-compose run doesn't run a command inside the container you started with docker-compose up. It starts a new container to run a one-off command. You probably want docker-compose exec.

The reason you don't see the variable when using docker-compose run is that you are overriding your CMD by providing a new command (bash) on the docker-compose run command line.

You could consider:

  • Using ENV statements in your Dockerfile.
  • Using the environment key in your docker-compose.yml

The former will embed the information into your image, while the latter would mean that the variable would be unset if you didn't explicitly set it in your docker-compose.yaml file (or using -e on the docker run command line).

You may be able to accomplish your goal using an ENTRYPOINT script and setting the value there, but that won't impact the environment visible to you when using docker exec (or docker-compose exec).



来源:https://stackoverflow.com/questions/47659190/how-to-set-env-variables-in-my-cmd-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!