【问题标题】:Pass environment variables in a dockerfile with a script使用脚本在 dockerfile 中传递环境变量
【发布时间】: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


【解决方案1】:

您似乎在寻找 .env 文件。

使用您要设置的变量创建格式为&lt;variable&gt;=value 的文件。

REDSHIFT_HOST="[Host of the DB]"
REDSHIFT_USER="[DB user]"
REDSHIFT_PASSWD="[DB password]"
# ...

然后使用 --env-file 选项(例如将其命名为 .env)将其传递给您的运行命令:

sudo docker run --rm -ti --env-file .env alpine sh

然后您可以检查echo $REDSHIFT_HOST的输出:

“[数据库主机]”

另外,看看this part of the docs

【讨论】:

  • 应该可以,但我想在构建时进行,因为我计划将它部署到 gcloud 的容器引擎中,我不知道是否可以告诉 kubernets 设置环境变量和更少从文件中制作它
【解决方案2】:

您的 Dockerfile 中有两个 CMD 语句,这是行不通的。您只能有 1 个 CMD 语句,因此您的最后一个将覆盖第一个。

来自Docker documentation

一个 Dockerfile 中只能有一个 CMD 指令。如果你列出了多个 CMD,那么只有最后一个 CMD 会生效。

您需要将您的CMDs 合并到一个语句中。

请看这里:Execute a script before CMD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2018-04-27
    • 2023-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多