【发布时间】: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并将其关闭,我就可以在本地Pipfile和Pipfile.lock中看到django-crispy-forms条目。关于第二条评论 - 我在某处读到这是一个 更好 的做法,因为本机操作系统和 Docker 操作系统是不同的,如果我在本地安装Pipfile.lock中的依赖关系图将是 不正确 部署在容器内时。 -
@MichalKrejčí 如果我在容器内安装
django-crispy-forms,然后在不重新构建的情况下尝试将适当的条目添加到本地settings.py和html 文件中,则在容器内运行的Web 服务器会因@ 而崩溃987654341@.
标签: django docker django-crispy-forms