在docker + nginx + uwsgi下无法find部署的应用程序的模块

我有一个烧瓶写的项目,结构如下:

-/ |- src |- __init__.py |- main.py |- module_a |- __init__.py |- ... |- ... |- web |- __init__.py |- web.py |- Dockerfile 

文件main.py调用web/web.py定义的入口函数,以及在module_a定义的web.py调用业务函数。 它可以正常使用命令python main.py

所以我打算将它部署在docker,Dockerfile中,如下所示:

 FROM tiangolo/uwsgi-nginx-flask:python3.6 COPY ./src/* /app/ 

在Docker中构build并运行Web应用程序,出现错误:

 Traceback (most recent call last): File "./main.py", line 1, in <module> from web import run File "./web.py", line 5, in <module> import module_a ModuleNotFoundError: No module named 'module_a' 

为什么module_a找不到module_a ? 我错过了什么?

问题是你的COPY语句。 我用你的数据创build了一个示例

 FROM alpine COPY ./src/* /app/ RUN ls -alh /app COPY ./src /app RUN ls -alh /app 

如果你build立,你会看到输出

 Step 1/5 : FROM alpine ---> 7328f6f8b418 Step 2/5 : COPY ./src/* /app/ ---> Using cache ---> ad9fbfdc161d Step 3/5 : RUN ls -alh /app ---> Using cache ---> 4dcad7cf4fba Step 4/5 : COPY ./src /app ---> d25b4dc34f82 Removing intermediate container 4bf0fc884332 Step 5/5 : RUN ls -alh /app ---> Running in 34401d92bf03 total 16 drwxr-xr-x 4 root root 4.0K Sep 1 16:46 . drwxr-xr-x 26 root root 4.0K Sep 1 16:46 .. -rw-rw-r-- 1 root root 0 Sep 1 16:44 __init__.py -rw-rw-r-- 1 root root 0 Sep 1 16:44 main.py drwxrwxr-x 2 root root 4.0K Sep 1 16:45 module_a drwxrwxr-x 2 root root 4.0K Sep 1 16:45 web -rw-rw-r-- 1 root root 0 Sep 1 16:45 web.py 

当您使用./src/*它会将这些匹配的内容复制到/ app。 所以你不会正确地得到这些文件。 所以你应该使用COPY ./src /app