Невозможно установить пакет Django в контейнер Docker

Я пытаюсь установить простой пакет 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 и правильно ли я это делаю?

Не могли бы вы проверить, что после docker-compose exec ... и docker-compose down, но до docker-compose up -d --build, django-crispy-forms добавлен в Pipfile в вашей локальной файловой системе? Также зачем вам добавлять пакет в контейнер? Если вы добавите его перед сборкой контейнера, он будет работать?

Michal Krejčí 06.04.2021 22:35

@ MichalKrejčí Да, после того, как я установил django-crispy-forms внутри контейнера и выключил его, я могу видеть записи django-crispy-forms как в локальных Pipfile, так и в Pipfile.lock. Что касается второго комментария - я где-то читал, что это была практика лучше, поскольку собственная ОС и ОС Docker отличаются, если я установлю локально, граф зависимостей в Pipfile.lock будет неверный при развертывании внутри контейнера.

RusI 07.04.2021 11:02

@ MichalKrejčí Если я установлю django-crispy-forms внутри контейнера, а затем, без перекомпоновки, попытаюсь добавить соответствующие записи в локальные файлы settings.py и html, веб-сервер, работающий внутри контейнера, выйдет из строя с ModuleNotFoundError: No module named 'crispy_forms'.

RusI 07.04.2021 11:08

связанные: stackoverflow.com/questions/17454514/…

RusI 07.04.2021 12:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя вопрос был об установке пакетов Django в контейнер Docker, решение было намного проще.

Два факта, на которые мне следовало обратить более пристальное внимание:

  1. После установки django-crispy-forms внутри контейнера я мог видеть соответствующие записи в локальных Pipfile и Pipfile.lock (подсказка @ MichalKrejčí)
  2. После восстановления образа и его запуска на сервере Django происходил сбой НЕТ с ModuleNotFoundError: No module named 'crispy_forms'.

Все это означало, что пакет успешно установлен и что-то еще происходит.

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

Другие вопросы по теме