【问题标题】:Unable to install Django package in a Docker container无法在 Docker 容器中安装 Django 包
【发布时间】:2021-07-02 14:52:36
【问题描述】:

我正在尝试在 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 包,我是否正确安装?

【问题讨论】:

  • 您能否验证在docker-compose exec ...docker-compose down 之后但在docker-compose up -d --build 之前django-crispy-forms 是否已添加到本地文件系统中的Pipfile 中?另外为什么需要在容器中添加包?如果在构建容器之前添加它,它会起作用吗?
  • @MichalKrejčí 是的,一旦我在容器中安装了django-crispy-forms 并将其关闭,我就可以在本地PipfilePipfile.lock 中看到django-crispy-forms 条目。关于第二条评论 - 我在某处读到这是一个 更好 的做法,因为本机操作系统和 Docker 操作系统是不同的,如果我在本地安装 Pipfile.lock 中的依赖关系图将是 不正确 部署在容器内时。
  • @MichalKrejčí 如果我在容器内安装django-crispy-forms,然后在不重新构建的情况下尝试将适当的条目添加到本地settings.py 和html 文件中,则在容器内运行的Web 服务器会因@ 而崩溃987654341@.

标签: django docker django-crispy-forms


【解决方案1】:

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

我应该更加关注的两个事实:

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

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

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

【讨论】:

    【解决方案2】:

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

    docker-compose down
    

    其次,激活你的本地环境 如果使用 pipenv

    pipenv shell
    pipenv install django-crispy-forms
    

    第三,重建你的容器

    docker-compose up -d --build
    

    最后,再次停止您的容器并

    docker-compose up -d
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 2015-04-24
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多