2017-09-01 107 views
0

我有一個項目寫在量瓶中,用結構像部署瓶應用的模塊:找不到下搬運工+的nginx + uwsgi

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

main.py調用web/web.py定義輸入功能的文件,並web.py電話業務功能定義在module_a。它可以很好地使用命令python main.py

所以我打算部署下泊塢窗,Dockerfile如下:

FROM tiangolo/uwsgi-nginx-flask:python3.6 

COPY ./src/* /app/ 

生成並運行在泊塢窗的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' 

爲什麼uwsgi找不到module_a ?我錯過了什麼?

+0

如何導入'module_a'中定義的函數? –

回答

0

問題是您的COPY語句。我創建了一個樣本與數據

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

如果你建立你會看到輸出

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/*將那些比賽的內容複製到/應用程序。所以你不會正確地獲取文件。所以你應該使用COPY ./src /app