Public | Automated Build

Last pushed: 2 days ago
Short Description
PostGIS 2.3 on Postgres 9. Based on the official Postgres container.
Full Description


The mdillon/postgis image provides a Docker container running Postgres 9 with PostGIS 2.3 installed. This image is based on the official postgres image and provides variants for each version of Postgres 9 supported by the base image (9.2-9.6).

This image ensures that the default database created by the parent postgres image will have the following extensions installed:

  • postgis
  • postgis_topology
  • fuzzystrmatch
  • postgis_tiger_geocoder

Unless -e POSTGRES_DB is passed to the container at startup time, this database will be named after the admin user (either postgres or the user specified with -e POSTGRES_USER). If you would prefer to use the older template database mechanism for enabling PostGIS, the image also provides a PostGIS-enabled template database called template_postgis.


In order to run a basic container capable of serving a PostGIS-enabled database, start a container as follows:

docker run --name some-postgis -e POSTGRES_PASSWORD=mysecretpassword -d mdillon/postgis

For more detailed instructions about how to start and control your Postgres container, see the documentation for the postgres image here.

Once you have started a database container, you can then connect to the database as follows:

docker run -it --link some-postgis:postgres --rm postgres \
    sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'

See the PostGIS documentation for more details on your options for creating and using a spatially-enabled database.

Docker Pull Command
Source Repository

Comments (16)
5 days ago

@onit the POSTGRES_DB environment variable handles that. you can use all the same env vars from the library/postgres image. If not provided, the default DB is named for the default user (also modified by the POSTGRES_USER variable)

7 days ago

How about an environment variable for default DB?

16 days ago

Thanks for adding Alpine!! Awesome!

2 months ago

How about Alpine Linux? :-)

3 months ago

Not working for me. :(
I get:

ActiveRecord::StatementInvalid: PG::UndefinedFile: ERROR:  could not open extension control file "/usr/share/postgresql/9.6/extension/postgis.control": No such file or directory
PG::UndefinedFile: ERROR:  could not open extension control file "/usr/share/postgresql/9.6/extension/postgis.control": No such file or directory
5 months ago

Just re-deployed the 9.5 tagged image to my server and it failed to run properly due to the postgis extension being updated. How do I point to a specific version of postgis to stop that happening in future? It seems the tags only allow postgres version to be specified.

a year ago

Hi, I have tried to build from source but got errors

E: Version '2.1.7+dfsg-3~94.git954a8d0.pgdg80+1' for 'postgresql-9.3-postgis-2.1' was not found
E: Version '2.1.7+dfsg-3~94.git954a8d0.pgdg80+1' for 'postgis' was not found

seems to be a package management issue.

2 years ago

@pkorduan Unfortunately no. I think that would be a great thing to have, but this would need to be taken up with the PostGIS maintainers:

2 years ago

Thanks for this docker image. I use it for a web mapping application. Therefore I create a container from this image and link it into my web server container. Everything works fine so far, but how can my web application, running inside the web server container have access to the loader shp2pgsql and pgsql2shp in the database container? As far as I can see I have to install the loader in my web server container. But apt-get install postgis will also install all the other dependencies postgis and postgresql which is allready in the postgis container. Isn't it redundant to do so. Do anyone know a debian package only with the loader?

2 years ago

@rarkins That looks like a Docker issue caused by an unexpected JSON response from the Docker Registry. As far as I know, there isn't any Go code in Postgres or Postgis.