【问题标题】:Dockerfile entrypoint bash file that loads .env not visible in container加载.env的Dockerfile入口点bash文件在容器中不可见
【发布时间】:2021-08-04 13:38:55
【问题描述】:

我正在尝试为我的应用程序开发一个 Dockerfile,该应用程序在初始化后会加载大量环境变量。不知何故,当我稍后执行以下命令时,这些变量无法访问:

docker exec -it container_name bash
printenv

我的环境变量不可见。但是,如果我手动加载文件,它们是:

docker exec -it container_name bash
source .env
printenv
... environment variables are shown ...

这是我的 dockerfile:

Dockerfile

FROM python:3.6
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/requirements.txt

RUN pip install -r requirements.txt

COPY . /usr/src/app/
RUN chmod 755 load_env_variables.sh

ENTRYPOINT ["/bin/bash", "-c", "/usr/src/app/load_env_variables.sh"]

load_env_variables.sh

#!/bin/bash

source .env
python start_application

我的 .env 文件还包含以下行:'export name=value'。

【问题讨论】:

    标签: bash docker


    【解决方案1】:

    这种行为的原因是docker exec -it container_name bash 启动了一个新的 bash。新的 bash 只有标准环境变量加上 .bashrc 或 .bash_profile 文件中指定的变量。 解决您的问题的适当方法是将选项 --env-file 与 docker run 命令一起使用。请注意,env 文件需要如下所示:

    test1=test1
    test2=test2
    

    【讨论】:

    • 这不太对,你可以自己测试一下。 export test=test、/bin/bash、echo $test。仍然输出测试。在我尝试之前我也是这么想的。也是docker exec -ti container_name bash。
    • 我不确定您的确切意思。但是docker exec -it 的行为就像您将 ssh 连接到虚拟机一样,因此正在使用带有新环境变量的新 bash。尽管如此,一个适当的解决方案是使用--env-file 选项。
    • 对不起,你是对的。我想到了相同的答案,对其进行了测试(不足)并错误地纠正了您。正如您现在所说,创建新环境的不仅仅是新 bash 的开始,而是对容器的“ssh-ing”。 +1 --env-file 选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2011-02-25
    • 1970-01-01
    • 2017-11-14
    • 2019-12-30
    相关资源
    最近更新 更多