在Docker中安装GeoDjango和PostGIS

7

我正在尝试创建一个docker环境,以便我可以轻松地构建和部署geodjango应用程序(带有postgis后端)。 我有以下文件夹结构:

|-- Dockerfile
|-- Pipfile
|-- Pipfile.lock
|-- README.md
|-- app
|   |-- manage.py
|   |-- app
|   `-- app_web

在我的Dockerfile中设置Django,我有以下内容:
# 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似乎无法识别数据库。

有人能告诉我出了什么问题吗?


你找出问题了吗? - fedorqui
3个回答

1
在 settings.py 文件中,需要指定 PASSWORD
DATABASES = {
    'default': {
         'ENGINE': 'django.contrib.gis.db.backends.postgis',
         'NAME': 'postgres',
         'USER': 'postgres',
         'PASSWORD': 'postgres',
         'HOST': 'postgis',
    },
}

1
运行 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

0

你安装了这个应用吗?

INSTALLED_APPS = [
    # [...]
    'django.contrib.gis'
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接