Как полностью удалить виртуальную среду в Docker?

Я пытаюсь создать контейнер Django и Postgre с помощью docker-compose. Я следовал этому руководству: https://docs.docker.com/samples/django/.

Я использую Windows и выполнил следующую команду:

docker-compose run web django-admin startproject composeexample .

После этого я изменил свой Dockerfile, включив в него apt-get update

# syntax=docker/dockerfile:1
FROM python:3
RUN apt-get update
RUN apt-get install -y libgdal-dev

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install -r requirements.txt
COPY . /usr/src/app/

Я удалил созданную папку composeexample и папку data, и запустил команду снова.

docker-compose run web django-admin startproject composeexample .

На этот раз. Я получаю следующую ошибку:

CommandError: /usr/src/app/manage.py уже существует. Наложение проекта на существующий каталог не заменит конфликтующие файлы. ОШИБКА: 1

Почему-то Docker считает, что файлы все еще существуют с первого выполнения. Даже если я изменю имя родительского каталога, чтобы изменить имя контейнера, я все равно получаю ошибку.

Как я могу полностью удалить окружение из моего 1-го выполнения?

Согласно руководству, которому вы следовали, в файле docker-compose.yml объявляется том для монтирования в контейнер docker:

  web:
...
    volumes:
      - .:/usr/src/app
...

В вашем файле docker вы копируете содержимое локального каталога в объявленный рабочий каталог /usr/src/app.

Вот что я бы предложил:

  1. измените место расположения файлов ресурсов, которые будут использоваться для сборки вашего контейнера docker.

В своих проектах я обычно полагаюсь на такую структуру каталогов:

web/
  - Dockerfile
  + build-src/
    ... the needed files to build the container image ..
    - requirements.txt
  + data/
    .. the data files and folders needed/resulting of running ..
  1. измените файл docker на что-то вроде этого:
# syntax=docker/dockerfile:1
FROM python:3
RUN apt-get update
RUN apt-get install -y libgdal-dev

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /usr/src/app

COPY ./web/build-src/requirements.txt /usr/src/app/
RUN pip install -r requirements.txt

После успешной сборки вы получите образ контейнера docker, в который встроены все необходимые требования для запуска вашего Python-приложения. Пока не собирайте контейнер ;)

ПРИМЕЧАНИЕ: каждая команда docker создает новый слой. Когда вы выполняете команду RUN для установки нового пакета, вы скорее хотите, чтобы она была "oneline" и удаляла временные файлы, которые могут занимать некоторое дисковое пространство впустую. Следующая команда приведет к тому же результату, что и ваша, но потребует меньше дискового пространства и создаст меньшие образы промежуточных слоев:

RUN apt-get update && \
    apt-get install -y \
        libgdal-dev && \
    rm -fr /var/lib/apt/lists
  1. измените часть docker compose web на что-то вроде этого:
  web:
...
    build:
      context: web
    volumes:
      - ./web/data:/usr/src/app
...
  1. Пересоберите и запустите ваш контейнер(ы) из верхней директории проекта:
$ docker-compose build
$ docker-compose up

В случае, если это не решит вашу проблему, это (по крайней мере) поможет вам изолировать файлы сборки от файлов выполнения (т.е.: файлы, необходимые для сборки образа контейнера, от файлов, которые либо используются, либо производятся/изменяются контейнером).

Вернуться на верх