Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GeoDjango and postgis setup in docker

I'm trying to create a docker setup such that I can easily build and deploy a geodjango app (with postgis backend). I have the following folder structure:

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

In my Dockerfile to setup Django I have the following:

# 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"]

In my docker-compose.yml file:

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:

And finally in settings.py:

DATABASES = {
    'default': {
         'ENGINE': 'django.contrib.gis.db.backends.postgis',
         'NAME': 'postgres',
         'USER': 'postgres',
         'HOST': 'postgis',
    },
}

Now when I: run docker-compose up --build It all seems to work (both the database as well as the django app spin up their containers). But whenever I try to actually work with the database (the app is blank rightnow, so I still need to migrate) django doesn't seem to recognize the database.

Can anybody tell me what is going wrong?

like image 937
Yorian Avatar asked Nov 07 '22 09:11

Yorian


1 Answers

run docker-compose up --build It all seems to work (both the database as well as the django app spin up their containers)

Make sure to check the logs because containers not necessarily stop after finding an error.

docker-compose logs

Also you're already setting your working dir in Dockerfile

WORKDIR /code/app

so take a look at the command you execute in docker-compose.yml:

command: python /code/app/manage.py runserver 0.0.0.0:8000
like image 155
Marco Richetta Avatar answered Nov 12 '22 11:11

Marco Richetta