【发布时间】:2021-05-26 20:30:44
【问题描述】:
谁能看到我在这里做错了什么?在本地工作正常,但是在 docker 中运行它时似乎找不到我的模块...
如果该信息有帮助,init.py 文件是空的。我不是 docker 方面的专家,而且到目前为止我在 googled/stackoverflow 上搜索到的提示都没有成功,例如在 dockerfile 中添加 pythonpath env。
来自 docker 的错误日志:
Traceback (most recent call last):
File "/usr/local/bin/uvicorn", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/uvicorn/main.py", line 331, in main
run(**kwargs)
File "/usr/local/lib/python3.7/site-packages/uvicorn/main.py", line 354, in run
server.run()
File "/usr/local/lib/python3.7/site-packages/uvicorn/main.py", line 382, in run
loop.run_until_complete(self.serve(sockets=sockets))
File "uvloop/loop.pyx", line 1456, in uvloop.loop.Loop.run_until_complete
File "/usr/local/lib/python3.7/site-packages/uvicorn/main.py", line 389, in serve
config.load()
File "/usr/local/lib/python3.7/site-packages/uvicorn/config.py", line 288, in load
self.loaded_app = import_from_string(self.app)
File "/usr/local/lib/python3.7/site-packages/uvicorn/importer.py", line 23, in import_from_string
raise exc from None
File "/usr/local/lib/python3.7/site-packages/uvicorn/importer.py", line 20, in import_from_string
module = importlib.import_module(module_str)
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "./main.py", line 3, in <module>
from routers.user import router as user_router
ModuleNotFoundError: No module named 'routers'
Dockerfile:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
RUN apt-get update
RUN apt-get install -y --no-install-recommends
# install requirements
RUN pip3 install fastapi[all] uvicorn[standard]
# Move files
COPY ./* /app
# attemt to fix a python ModuleNotFoundError
WORKDIR /app
#ENV PATH=$PATH:/app
ENV PYTHONPATH "${PYTHONPATH}:/app"
CMD [ "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "15400"]
Docker-compose.yml:
version: '3'
services:
core_api:
build: .
container_name: "core-api-container"
ports:
- "8000:15400"
volumes:
- ./app/:/app
文件结构:
API/
--__init__.py
--Dockerfile
--docker-compose.yml
--main.py
--routers/
--__init__.py
--user.py
--x.py
main.py:
from fastapi import FastAPI
from routers.user import router as user_router
from routers.x import router as x_router
app = FastAPI()
app.include_router(user_router)
app.include_router(x_router)
【问题讨论】:
标签: python docker docker-compose dockerfile fastapi