Я пытаюсь установить простой пакет Django в контейнер Docker.
Вот мой файл докеров
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY Pipfile Pipfile.lock /app/
RUN pip install pipenv && pipenv install --system
COPY . /app/
А вот и мой docker-compose:
version: '3.7'
services:
web:
build: .
command: python /app/manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- 8000:8000
depends_on:
- db
db:
image: postgres:11
volumes:
- /Users/ruslaniv/Documents/Docker/djangoapp:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=XXX
- POSTGRES_PASSWORD=XXX
- POSTGRES_DB=djangoapp
volumes:
djangoapp:
Итак, я начинаю свой контейнер с
docker-compose up
затем установите пакет и пересоберите образ
docker-compose exec web pipenv install django-crispy-forms
docker-compose down
docker-compose up -d --build
Затем я добавляю 'crispy_forms' в локальный settings.py и регистрирую теги хрустящих форм в локальном html-файле с помощью {% load crispy_forms_tags %}, а затем использую их для формы с {{ form|crispy }}.
Но форма не отображается должным образом. Поскольку сам пакет и его использование очень просты, я думаю, что есть проблема с установкой пакета в контейнер.
Итак, вопрос в том, как правильно установить пакет Django в контейнер Docker и правильно ли я это делаю?
@ MichalKrejčí Да, после того, как я установил django-crispy-forms внутри контейнера и выключил его, я могу видеть записи django-crispy-forms как в локальных Pipfile, так и в Pipfile.lock. Что касается второго комментария - я где-то читал, что это была практика лучше, поскольку собственная ОС и ОС Docker отличаются, если я установлю локально, граф зависимостей в Pipfile.lock будет неверный при развертывании внутри контейнера.
@ MichalKrejčí Если я установлю django-crispy-forms внутри контейнера, а затем, без перекомпоновки, попытаюсь добавить соответствующие записи в локальные файлы settings.py и html, веб-сервер, работающий внутри контейнера, выйдет из строя с ModuleNotFoundError: No module named 'crispy_forms'.
связанные: stackoverflow.com/questions/17454514/…





Хотя вопрос был об установке пакетов Django в контейнер Docker, решение было намного проще.
Два факта, на которые мне следовало обратить более пристальное внимание:
django-crispy-forms внутри контейнера я мог видеть соответствующие записи в локальных Pipfile и Pipfile.lock (подсказка @ MichalKrejčí)ModuleNotFoundError: No module named 'crispy_forms'.Все это означало, что пакет успешно установлен и что-то еще происходит.
Дело в том, что мне пришлось вручную включать CSS-файлы Bootstrap4 для хрустящих форм для рендеринга форм в соответствии с шаблоном Bootstrap4.
Не могли бы вы проверить, что после
docker-compose exec ...иdocker-compose down, но доdocker-compose up -d --build,django-crispy-formsдобавлен в Pipfile в вашей локальной файловой системе? Также зачем вам добавлять пакет в контейнер? Если вы добавите его перед сборкой контейнера, он будет работать?