如何在 Dockerfile 中添加 PYTHONPATH 的路径
Posted
技术标签:
【中文标题】如何在 Dockerfile 中添加 PYTHONPATH 的路径【英文标题】:How do you add a path to PYTHONPATH in a Dockerfile 【发布时间】: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"]
【问题讨论】:
【参考方案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,没有任何变化
有人给这家伙一枚奖章。太感谢了。像魅力一样工作。 :)以上是关于如何在 Dockerfile 中添加 PYTHONPATH 的路径的主要内容,如果未能解决你的问题,请参考以下文章
如何编写 Dockerfile 来运行 Python3 + PyQt5