在 Ubuntu 16.04 中设置 PYTHONPATH 以使 Docker 映像正常运行

Posted

技术标签:

【中文标题】在 Ubuntu 16.04 中设置 PYTHONPATH 以使 Docker 映像正常运行【英文标题】:Setting PYTHONPATH in Ubuntu 16.04 for a Docker image to run properly 【发布时间】:2017-11-29 00:37:42 【问题描述】:

我有一个正在运行 gunicorn 进程的 docker 映像,但每次运行时都会收到错误 ImportError: No module named 'crm'。所以我关注this SO post来解决这个问题。

但是,当我运行时

ENTRYPOINT ["PYTHONPATH=`pwd`/..", "/usr/local/bin/gunicorn", "web_interface:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000",  "--reload"]

容器吐出一个

ERROR: for web  Cannot start service web: oci runtime error: container_linux.go:247: starting container process caused "exec: \"PYTHONPATH=`pwd`/.. \": stat PYTHONPATH=`pwd`/.. : no such file or directory"

知道如何运行 PYTHONPATH 命令吗?

我应该声明它可以在我的 Mac 上本地运行,但不能在 Ubuntu 容器中运行。

我尝试过的:

"PYTHONPATH=pwd/.."

"PYTHONPATH=$(pwd)/.."

"PYTHONPATH=$PWD/.."

【问题讨论】:

【参考方案1】:

您应该使用ENV 指令定义ENTRYPOINT 之外的环境:

ENV PYTHONPATH /absolute/path/to/the/pythonpath/inside/the/container
ENTRYPOINT ["/usr/local/bin/gunicorn", "web_interface:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000",  "--reload"]

【讨论】:

太好了,我更喜欢这个答案。所以我可以只使用$PWD/.. 而不是路径名 不确定$PWD,因为它取决于当前的WORKDIR (docs.docker.com/engine/reference/builder/#workdir)。您正在构建一个图像,因此您可以控制路径,无需与您的应用程序目录相关。 我使用了ENV PYTHONPATH "$PYTHONPATH:$PWD",效果很好。【参考方案2】:

所以这似乎有效

ENTRYPOINT ["/usr/local/bin/gunicorn", "--pythonpath=`$PWD`/..", "web_interface:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000",  "--reload"]

【讨论】:

以上是关于在 Ubuntu 16.04 中设置 PYTHONPATH 以使 Docker 映像正常运行的主要内容,如果未能解决你的问题,请参考以下文章

在 Ubuntu 16.04 上的 Nginx 中设置 phpmyadmin 和反向代理后无法获取 /phpmyadmin

Ubuntu 16.04安装uGet替代迅雷,并在Chrome中设置为默认下载器

如何在一个文件中设置多个虚拟主机

在 Ubuntu 和 Fedora 中设置 Python 开发环境

Python Selenium在ubuntu中设置firefox配置文件的路径

ubuntu16.04重置root密码