PYTHONPATH:module的Docker image和ENV命令未找到,即使在本地运行正常

PYTHONPATH:module的Docker image和ENV命令未找到,即使在本地运行正常,python,docker,pythonpath,Python,Docker,Pythonpath,我有一份Python工作,我正试图以Docker的形象发布。代码的结构是这样的:一些模块从modules文件夹中导入,因此我将其添加到Python路径中 具体来说,Dockerfile是 FROM python:3 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY . /usr/src/app ENV PYTHONPATH "/usr/src/app" RUN pip3 install -r requirements.txt 如您所见

我有一份Python工作,我正试图以Docker的形象发布。代码的结构是这样的:一些模块从
modules
文件夹中导入,因此我将其添加到Python路径中

具体来说,Dockerfile是

FROM python:3

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app

ENV PYTHONPATH "/usr/src/app"

RUN pip3 install -r requirements.txt
如您所见,我正在尝试为PYTHONPATH设置环境变量,以便它可以在同一工作目录中查找内容

要运行的脚本名为
main.py
,当我在本地(不是从docker)运行它时

它运行良好

使用Dockerfile instesd,在构建完从
docker inspect
获取的Env字段包含的图像之后

"Env": [
            "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "LANG=C.UTF-8",
            "PYTHON_VERSION=3.6.4",
            "PYTHON_PIP_VERSION=9.0.1",
            "PYTHONPATH=/usr/src/app"
        ]
所以看起来很好?但是,
docker run
给了我一个

ModuleNotFoundError: No module named 'modules'

这里的问题是,您可能没有复制到
/usr/src/app
的src文件夹中的
\uuuu init\uuuuuuuuuuuuuuy.py
。这就是为什么无法识别
模块
包的原因。您可以将
\uuuu init\uuuuu.py
添加到您的src文件夹,或将
模块添加到PYTHONPATH

ENV PYTHONPATH "/usr/src/app/:/usr/src/app/modules/"
请注意,如果您的
modules
文件夹中有子文件夹,则它还应包含
\uuu init\uuuuuuuuupy
语法为

ENV variable1[=value1] variable2[=value2] ...
如果没有等号,您将创建两个空变量;第二个的名称是
/usr/src/app
。你想要

ENV PYTHONPATH="/usr/src/app"
变量的名称和值之间有一个等号

如果要附加到现有值,可以:

ENV PYTHONPATH="/usr/src/app:${PYTHONPATH}"

你能用
-e PYTHONPATH=“/usr/src/app”
附加docker run命令并再次运行它吗?@SagarRuchandani Done,也不起作用,结果相同。不确定容器内发生了什么。这是否可能与您意识到在dockerfile中设置ENV时您交换了它而不是正确地附加它的情况相同?我建议这样做:
ENV PYTHONPATH=“$PYTHONPATH:/usr/src/app”
ENV PYTHONPATH="/usr/src/app:${PYTHONPATH}"