在 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 开发环境