Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
Shell 使用脚本在dockerfile中传递环境变量_Shell_Docker_Dockerfile - Fatal编程技术网

Shell 使用脚本在dockerfile中传递环境变量

Shell 使用脚本在dockerfile中传递环境变量,shell,docker,dockerfile,Shell,Docker,Dockerfile,我开始使用Docker,并使用Flask创建Web服务。为了连接到数据库,我需要告诉服务连接的凭据。我不想把变量直接放在Dockerfile上,最糟糕的是,放在代码上。我想通过Dockerfile上调用的shell脚本将它们传递给在构建时设置的环境变量 这里的问题是,我尝试使用CMD、RUN和ENTRYPOINT来实现这一点,但没有成功 以下是我的Dockerfile的最后一个版本: FROM python:2.7-slim WORKDIR /app ADD . /app RUN pi

我开始使用Docker,并使用Flask创建Web服务。为了连接到数据库,我需要告诉服务连接的凭据。我不想把变量直接放在Dockerfile上,最糟糕的是,放在代码上。我想通过Dockerfile上调用的shell脚本将它们传递给在构建时设置的环境变量

这里的问题是,我尝试使用CMD、RUN和ENTRYPOINT来实现这一点,但没有成功

以下是我的Dockerfile的最后一个版本:

FROM python:2.7-slim


WORKDIR /app
ADD . /app



RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 5000



ENTRYPOINT ["python"]
CMD ["/app/con.sh"]
CMD ["-u","app.py"]
脚本名为con.sh,其结构如下:

export REDSHIFT_HOST="[Host of the DB]"
export REDSHIFT_USER="[DB user]"
export REDSHIFT_PASSWD="[DB password]"
export POSTGRES_DB="[DB name]"
export MODEL_IP="[endpoint of another service]"
export USER_SF="[user]"
export PASS_SF="[pass]"
export TOKEN="[Token]"
export INSTANCE_URL="[URL]"
我从中得到的是:

    Traceback (most recent call last):
  File "app.py", line 4, in <module>
    from clean_leads import *
  File "/app/clean_leads.py", line 13, in <module>
    HOST = os.environ['REDSHIFT_HOST']
  File "/usr/local/lib/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'REDSHIFT_HOST'
回溯(最近一次呼叫最后一次):
文件“app.py”,第4行,在
从clean_导入*
文件“/app/clean_leads.py”,第13行,在
HOST=os.environ['REDSHIFT\u HOST']
文件“/usr/local/lib/python2.7/UserDict.py”,第40行,在__
升起钥匙错误(钥匙)
KeyError:“红移\主机”

这确认了没有设置环境变量。

您似乎在寻找一个.env文件

使用要设置的变量以
=value
格式创建一个文件

REDSHIFT_HOST="[Host of the DB]"
REDSHIFT_USER="[DB user]"
REDSHIFT_PASSWD="[DB password]"
# ...
然后使用--env file选项将其传递给run命令(例如,将其命名为.env):

然后,您可以检查echo$REDSHIFT\u主机的输出:

“[数据库的主机]”


另外,请看一下。

您的Dockerfile中有两条
CMD
语句,这两条语句不起作用。您只能有1个
CMD
语句,因此最后一个语句将覆盖第一个语句

从:

Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令生效

您需要将
CMD
s组合成一条语句


请参见此处:

您是否尝试过“setenv REDSHIFT_HOST”[HOSTOF DB]”这应该可以,但我想在构建时这样做,因为我计划将其部署到gcloud的容器引擎中,我不知道是否可以让kubernets设置环境变量,而不是从文件中设置环境变量
sudo docker run --rm -ti --env-file .env alpine sh