【问题标题】:docker-compose throwing "ModuleNotFoundError" with pandasdocker-compose 用 pandas 抛出“ModuleNotFoundError”
【发布时间】:2021-07-28 21:32:25
【问题描述】:

我正在尝试将连接到 mongodb 的非常简单的 Flask API 容器化。对于 API 的输出,我使用的是 pandas 模块。但是,当我运行 'docker-compose up' 时,出现以下错误:

app_1 |回溯(最近一次通话最后一次):
app_1 |文件“app.py”,第 6 行,在
app_1 |将熊猫导入为 pd
app_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 中有熊猫,容器不应该有模块吗?对于 pymongo 或 Flask,我没有收到此错误,这就是我好奇的原因。我对 Docker 还很陌生,因此我们将不胜感激。

【问题讨论】:

    标签: python mongodb docker docker-compose containers


    【解决方案1】:

    有几点:

    DOCKERFILE

    FROM python:3.8
    
    WORKDIR /app
    
    ADD . .
    COPY requirements.txt .
    
    RUN pip install -r requirements.txt
    
    ENTRYPOINT ["python","app.py"]
    

    ENTRYPOINT(和CMD

    您最好从容器中运行 Python 应用程序。在 Dockerfile 末尾添加:ENTRYPOINT ["python","app.py"]

    注意 Docker ENTRYPOINT 是运行容器时的默认(入口点)。将其设置为运行容器时要运行的二进制文件(即python app.py)是一个好习惯。 Docker ENTRYPOINT 可以被 Docker Compose entrypoint 覆盖。还有CMD。最好将其设置为运行容器时要运行的默认参数和标志。在docker-compose.yml 中,command 覆盖 Docker CMD

    然后你可以独立运行容器来测试它:

    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 目录。这样做会覆盖例如pip install 您运行并导致问题

    我认为您不想要 links 条目。您的 python 应用程序可以通过您给它的名称引用 MongoDB 服务 db

    【讨论】:

    • 你所说的关于卷的内容解决了这个问题。该程序仍然存在问题,但我将解决它们。谢谢! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多