无法在 Docker 容器中安装 Django 包

时间:2021-04-06 19:16:23

标签: django docker django-crispy-forms

我正在尝试在 Docker 容器中安装一个简单的 Django 包。

这是我的 dockerfile

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 并使用 {% load crispy_forms_tags %} 在本地 html 文件中注册脆皮表单标签,然后将它们用于带有 {{ form|crispy }} 的表单

但是表单没有正确呈现。
由于包本身及其用法非常简单,我认为将包安装在容器中存在问题。

那么问题是如何在 Docker 容器中正确安装 Django 包,我这样做是否正确?

2 个答案:

答案 0 :(得分:0)

虽然问题是关于在 Docker 容器中安装 Django 包,但解决方案要简单得多。

我应该密切关注的两个事实:

  1. 在容器内安装 django-crispy-forms 后,我可以看到适当的条目出现在本地 PipfilePipfile.lock(给@MichalKrejčí 的提示)
  2. 重建映像并运行后,Django 服务器没有崩溃,ModuleNotFoundError: No module named 'crispy_forms'

所有这一切都意味着该软件包已成功安装,并且正在发生其他事情。

事实上,我必须手动包含用于脆皮表单的 Bootstrap4 CSS 文件,以便根据 Bootstrap4 模板呈现表单。

答案 1 :(得分:0)

首先,你应该停止你的容器

docker-compose down

第二,激活你的本地环境 如果使用pipenv

pipenv shell
pipenv install django-crispy-forms

第三,重建你的容器

docker-compose up -d --build

最后,再次停止你的容器

docker-compose up -d
相关问题