Служба Docker Flask: ModuleNotFoundError: при запуске контейнера нет модуля с именем «flask», но он работает вручнуюPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Служба Docker Flask: ModuleNotFoundError: при запуске контейнера нет модуля с именем «flask», но он работает вручную

Сообщение Anonymous »

Я пытаюсь создать и запустить службу Python на основе Flask (

Код: Выделить всё

task_manager
), используя Docker и Docker Compose, но я столкнулся с постоянной проблемой. Когда я запускаю контейнер через docker-compose up --build, службе не удается найти модуль Flask:

Код: Выделить всё

task_manager  | Traceback (most recent call last):
task_manager  |   File "/app/task_manager.py", line 1, in 
task_manager  |     from flask import Flask, jsonify
task_manager  | ModuleNotFoundError: No module named 'flask'
Однако та же служба работает отлично, если я вручную выполняю следующие команды в PowerShell:

Код: Выделить всё

docker run -it --name task_manager -v D:/Projects/my_ai_assistant/task_manager:/app -w /app python:3.11-slim bash
apt-get update && apt-get install -y --no-install-recommends build-essential libssl-dev libffi-dev python3-dev bash && rm -rf /var/lib/apt/lists/*
python -m venv /app/venv
source /app/venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
/app/venv/bin/python /app/task_manager.py
Контекст установки:
  • Основная система хоста : Windows 11
  • Среда:

    Запуск Docker Desktop с Debian (через MS Store) в качестве WSL серверная часть
  • Использование PowerShell для команд
[*]Структура каталога:
  • Код: Выделить всё

    D:/Projects/my_ai_assistant/
    — это корневой каталог.
  • Каждая служба (

    Код: Выделить всё

    task_manager
    и gui_dashboard) имеет собственную подпапку и Dockerfile.


Рабочий сервис (

Код: Выделить всё

gui_dashboard
) для справки:[/b]
Сервис gui_dashboard работает без проблем. Его настройка:
docker-compose.yml (соответствующий раздел):

Код: Выделить всё

gui_dashboard:
build:
context: ./gui_dashboard
container_name: gui_dashboard
working_dir: /app
volumes:
- ./gui_dashboard:/app
ports:
- "3000:3000"
restart: unless-stopped
command: ["npm", "start"]
Проблемный Task_manager Сервис:
docker- compose.yml (соответствующий раздел):

Код: Выделить всё

task_manager:
build:
context: ./task_manager
container_name: task_manager
working_dir: /app
volumes:
- ./task_manager:/app
ports:
- "5000:5000"
environment:
FLASK_RUN_HOST: "0.0.0.0"
FLASK_RUN_PORT: "5000"
restart: unless-stopped
task_manager/Dockerfile:

Код: Выделить всё

# Use the official Python image
FROM python:3.11-slim

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Set the working directory
WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libssl-dev \
libffi-dev \
python3-dev \
bash && \
rm -rf /var/lib/apt/lists/*

# Copy application files
COPY .  /app/

# Create a virtual environment and install dependencies
RUN python -m venv /app/venv && \
source /app/venv/bin/activate && \
/app/venv/bin/pip install --upgrade pip && \
/app/venv/bin/pip install --no-cache-dir -r /app/requirements.txt

# Expose Flask's default port
EXPOSE 5000

# Command to run the application
CMD ["python", "/app/task_manager.py"]
Примечания по устранению неполадок:
  • Работает выполнение вручную:

    Выполнение шагов в PowerShell вручную, включая активацию виртуальной среды и запуск сценария, работает безупречно.

    Монтаж Файловая система:

    Я использую -v D:/Projects/my_ai_assistant/task_manager:/app, чтобы сопоставить локальный каталог для видимости и избежать копирования файлов в контейнер.

    p>
  • Поэкспериментируйте с CMD:

    Измените CMD для использования виртуального среду явно:

    Код: Выделить всё

    CMD ["/app/venv/bin/python", "/app/task_manager.py"]
    
    Результаты:

    Код: Выделить всё

    Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/app/venv/bin/python": stat /app/venv/bin/python: no such file or directory: unknown
    
В чем мне нужна помощь:
Почему не удается найти модуль Flask (

Код: Выделить всё

ModuleNotFoundError
) во время создания docker, даже если это работает вручную? Как я могу гарантировать, что служба Task_manager работает должным образом с помощью Docker Compose?


Подробнее здесь: https://stackoverflow.com/questions/792 ... en-running
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»