【问题标题】:How do you add a path to PYTHONPATH in a Dockerfile如何在 Dockerfile 中添加 PYTHONPATH 的路径
【发布时间】:2018-09-12 20:14:12
【问题描述】:

如何在 Dockerfile 中添加指向PYTHONPATH 的路径?这样当容器运行时它就有正确的PYTHONPATH?我对 Docker 完全陌生。

我已将 ENV PYTHONPATH "${PYTHONPATH}:/control" 添加到 Dockerfile,因为我想将目录 /control 添加到 PYTHONPATH

当我使用docker exec -it trusting_spence bash 访问容器的bash 并打开python 并运行目录下的命令时,control 不在列表中。

import sys print(sys.path)

FROM python:2
RUN pip install requests pymongo

RUN mkdir control

COPY control_file/ /control

ENV PYTHONPATH "${PYTHONPATH}:/control"

CMD ["python","control/control_file/job.py"] 

【问题讨论】:

    标签: python docker path


    【解决方案1】:

    以更简单的方式进行。以这种方式将 .env 文件中的 python 路径添加为一行。

    PYTHONPATH=/app/project_source/

    【讨论】:

      【解决方案2】:

      您正确设置了 python 路径,但您的命令不是由 shell 运行的,因此不考虑环境变量 PYTHONPATH

      将您的CMD 从“exec”形式更改为“shell”形式:

      CMD python control/control_file/job.py


      来自Docs

      注意:与 shell 形式不同,exec 形式不调用命令 shell。这意味着不会发生正常的外壳处理。例如,CMD [ "echo", "$HOME" ] 不会对 $HOME 进行变量替换。如果你想要 shell 处理,那么要么使用 shell 形式,要么直接执行 shell,例如:CMD [ "sh", "-c", "echo $HOME" ]。当使用 exec 形式并直接执行 shell 时,与 shell 形式一样,是 shell 进行环境变量扩展,而不是 docker。

      【讨论】:

        【解决方案3】:

        只需在您的Dockerfile 中添加一个ENV 条目:

        ENV PYTHONPATH "${PYTHONPATH}:/your/custom/path"
        

        或者在你的启动脚本中设置PYTHONPATH

        【讨论】:

        • 我尝试了你的建议但没有成功,我已经编辑了我的原始帖子以包含我的步骤。你能建议我做错了什么吗?
        • 您是否尝试过修复字符串中的错字? "${PYTHONPATH}:/your/custom/path"
        • 出于某种原因,这仍然只是覆盖我的 PYTHONPATH。此外,虽然这是在修改 ENV 变量,但我根据python -c "import sys; for p in sys.path: print(p)" 的路径仍然没有改变,只包含旧的(似乎被覆盖的)PYTHONPATH,没有任何变化
        • 有人给这家伙一枚奖章。太感谢了。像魅力一样工作。 :)
        猜你喜欢
        • 2012-05-31
        • 2019-10-06
        • 2018-02-21
        • 2016-06-03
        • 1970-01-01
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 2019-10-18
        相关资源
        最近更新 更多