django - docker 中的 GeoDjango 和 postgis 设置
问题描述
我正在尝试创建一个 docker 设置,以便我可以轻松构建和部署 geodjango 应用程序(带有 postgis 后端)。我有以下文件夹结构:
|-- Dockerfile
|-- Pipfile
|-- Pipfile.lock
|-- README.md
|-- app
| |-- manage.py
| |-- app
| `-- app_web
在我设置 Django 的 Dockerfile 中,我有以下内容:
# Pull base image
FROM python:3.7
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
RUN pip install pipenv
COPY . /code
WORKDIR /code/
RUN pipenv install --system
# Setup GDAL
RUN apt-get update &&\
apt-get install -y binutils libproj-dev gdal-bin python-gdal python3-gdal
# set work directory
WORKDIR /code/app
CMD ["python", "manage.py", "migrate", "--no-input"]
在我的 docker-compose.yml 文件中:
version: '3.7'
services:
postgis:
image: kartoza/postgis:12.1
volumes:
- postgres_data:/var/lib/postgresql/data/
web:
build: .
command: python /code/app/manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
volumes:
- .:/code
depends_on:
- postgis
volumes:
postgres_data:
最后在 settings.py 中:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'postgis',
},
}
现在,当我:运行 docker-compose up --build 一切似乎都可以正常工作(数据库和 django 应用程序都启动了它们的容器)。但是每当我尝试实际使用数据库时(应用程序现在是空白的,所以我仍然需要迁移)django 似乎无法识别数据库。
谁能告诉我出了什么问题?
解决方案
运行 docker-compose up --build 似乎一切正常(数据库和 django 应用程序都启动了它们的容器)
确保检查日志,因为容器不一定会在发现错误后停止。
docker-compose logs
此外,您已经在Dockerfile中设置了工作目录
WORKDIR /code/app
所以看看你在docker-compose.yml中执行的命令:
command: python /code/app/manage.py runserver 0.0.0.0:8000
推荐阅读
- javascript - 使用 JavaScript 显示特定时区的实时时间
- field - Tableau 使用带有月度数据的现场季度记录
- python-3.x - 在链表中检测循环/循环的不同方法
- ios - 用计时器解除 UIAlertController
- python - 如何在 Selenium 中单击班级孩子的最后一个按钮
- kde - 意外关闭manjaro后如何继续调整分区大小
- angular - 如何从 NX 工作区中的延迟加载库中急切地导入一个子集?
- vue.js - 使用 Vue.js 未在 mount() 中调用 axios 拦截器
- javascript - 使用 puppeteer 在现场看不到元素
- android - android-Picasso 回调防止垃圾收集