![](/img/trans.png)
[英]Docker-compose can't import Django (ModuleNotFoundError)
[英]docker-compose throwing “ModuleNotFoundError” with pandas
我正在尝试容器化一个连接到 mongodb 的非常简单的 Flask API。 对于 API 的输出,我使用的是 pandas 模块。 但是,当我运行“docker-compose up”时,出现以下错误:
应用程序_1 | 回溯(最近一次调用最后一次):
应用程序_1 | 文件“app.py”,第 6 行,在
应用程序_1 | 将熊猫导入为 pd
应用程序_1 | ModuleNotFoundError: 没有名为“pandas”的模块
这是我的 dockerfile:
FROM python:3.8
ADD . /app
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
这是我的 docker-compose.yml:
app:
build: .
command: python -u app.py
ports:
- "5000:5000"
volumes:
- .:/app
links:
- db
db:
image: mongo:latest
我的requirements.txt如下:
pymongo==3.11.4
Flask==1.1.2
pandas==1.1.3
由于我在requirements.txt中有pandas,容器不应该有模块吗? 对于 pymongo 或 Flask,我没有收到此错误,这就是我很好奇的原因。 我对 Docker 还很陌生,所以任何帮助都将不胜感激。
几件事:
DOCKERFILE
FROM python:3.8
WORKDIR /app
ADD . .
COPY requirements.txt .
RUN pip install -r requirements.txt
ENTRYPOINT ["python","app.py"]
ENTRYPOINT
(和CMD
) 您最好从容器内运行 Python 应用程序。 添加: ENTRYPOINT ["python","app.py"]
到 Dockerfile 的末尾。
注意Docker
ENTRYPOINT
是运行容器时的默认值(入口点)。 将它设置为运行容器时要运行的二进制文件(即python app.py
)是一个很好的做法。 DockerENTRYPOINT
可以被 Docker Composeentrypoint
覆盖。 还有CMD
。 将其设置为运行容器时要运行的默认参数和标志是一种很好的做法。 在docker-compose.yml
,command
会覆盖 DockerCMD
。
然后你可以独立运行容器来测试它:
docker build \
--tag=68567602:v1 \
--file=./Dockerfile \
.
docker run \
--interactive --tty --rm \
--publish=5000:5000 \
68567602:v1
WORKDIR
在 Dockerfile 中,最好先设置WORKDIR
以保存重复引用,即
docker-compose.yml
app:
build: .
ports:
- "5000:5000"
db:
image: mongo:latest
command
docker-compose.yml
不需要包含command
除非你想覆盖容器的CMD
设置
volumes
该docker-compose.yml
不应该覆盖容器的/app
与你的主目录/app
目录。 这样做会覆盖您运行的 eg pip install
并导致问题
links
我认为你不想要links
条目。 您的 Python 应用程序可以通过您给它提供的名称来引用 MongoDB 服务db
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.