【发布时间】:2018-05-11 02:36:58
【问题描述】:
我开始使用 Docker,并且正在使用 Flask 制作网络服务。为了连接到数据库,我需要告诉服务要连接的凭据。我不想将变量直接放在 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'
这确认没有设置环境变量。
【问题讨论】:
-
你试过 `setenv REDSHIFT_HOST "[HOSTOF DB]"
标签: shell docker dockerfile