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:
-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
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.
Known Issues / Errors
When You encouter errors due to PostGIS update
OperationalError: could not access file "$libdir/postgis-X.X, run:
docker exec some-postgis update-postgis.sh
It will update to Your newest PostGIS. Update is idempotent, so it won't hurt when You run it more than once, You will get notification like:
Updating PostGIS extensions template_postgis to X.X.X NOTICE: version "X.X.X" of extension "postgis" is already installed NOTICE: version "X.X.X" of extension "postgis_topology" is already installed NOTICE: version "X.X.X" of extension "postgis_tiger_geocoder" is already installed ALTER EXTENSION Updating PostGIS extensions docker to X.X.X NOTICE: version "X.X.X" of extension "postgis" is already installed NOTICE: version "X.X.X" of extension "postgis_topology" is already installed NOTICE: version "X.X.X" of extension "postgis_tiger_geocoder" is already installed ALTER EXTENSION
@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)
How about an environment variable for default DB?
Thanks for adding Alpine!! Awesome!
How about Alpine Linux? :-)
Not working for me. :(
ActiveRecord::StatementInvalid: PG::UndefinedFile: ERROR: could not open extension control file "/usr/share/postgresql/9.6/extension/postgis.control": No such file or directory : CREATE EXTENSION IF NOT EXISTS "postgis" PG::UndefinedFile: ERROR: could not open extension control file "/usr/share/postgresql/9.6/extension/postgis.control": No such file or directory
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.
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.
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?
@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.