#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