testdriven.io: Разработка на основе тестирования с помощью FastAPI и Docker: Наличие ошибок при запуске контейнера docker

#docker #testdriven.io

Вопрос:

Я прохожу курс разработки на основе тестирования с помощью FastAPI и докера из testdriven.io. Когда я собирался запустить контейнер docker, я столкнулся с этой ошибкой:

 ERROR: for web  Cannot start service web: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "uvicorn": executable file not found in $PATH: unknown
 

Это мой докер-compose.yml:

 version: '3.8'

services:
  web:
    build: ./project
    command: uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000
    volumes:
      - ./project:/usr/src/app
    ports:
      - 8004:8000
    environment:
      - ENVIRONMENT=dev
      - TESTING=0
 

Единственное, что я обновил, — это вместо использования pip, я использую poetry , поэтому я не уверен, связано ли это с проблемой. Вот мое Dockerfile использование poetry :

 FROM python:3.9.2-slim-buster

WORKDIR /usr/src/app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update 
    amp;amp; apt-get -y install netcat gcc 
    amp;amp; apt-get clean

RUN pip install --upgrade pip
RUN pip install poetry

COPY pyproject.toml .
COPY poetry.lock .

RUN poetry install --no-dev

COPY . .
 

Ответ №1:

Вам нужно запустить RUN poetry config virtualenvs.create false перед установкой с помощью poetry.
Поэзия по умолчанию создает виртуальную среду перед установкой зависимостей. Это предотвратит это.
Наконец Dockerfile -то должно выглядеть примерно так:

 FROM python:3.9.5-slim-buster

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update 
    amp;amp; apt-get -y install netcat gcc 
    amp;amp; apt-get clean

WORKDIR /usr/src/app

COPY ./pyproject.toml ./poetry.lock* /usr/src/app

RUN pip install --upgrade pip
RUN pip install poetry
RUN poetry config virtualenvs.create false

RUN poetry install --no-dev

COPY . /usr/src/app