Based on Official geoserver docker
Added the ability to run geoserver behind HTTPS nginx proxy - credits to Using NGINX to put Geoserver HTTPS
The following additional environment variables are available:
SSL_ENABLED
totrue
to enable SSL settings in Apache TomcatPROXY_BASE_URL
to set the the proxy base url (https://example.com/geoserver
)CSRF_DOMAIN
to allow specific domain against Cross-Site Request Forgery problem (example.org
)
Update your NGINX conf with the following location:
server {
listen 443 ssl;
server_name example.com;
...
location /geoserver {
proxy_pass http://127.0.0.1:9090/geoserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
Image can then be built:
docker build . -t geoserver:latest
And container be started:
docker run -d -p 9090:8080 -e CORS_ENABLED=true -e CORS_ALLOWED_ORIGINS="*" -e CORS_ALLOWED_METHODS="GET,POST,PUT,DELETE,HEAD,OPTIONS" -e CORS_ALLOWED_HEADERS="*" -e SSL_ENABLED=true -e PROXY_BASE_URL="https://example.com/geoserver" -e CSRF_DOMAIN="example.com" geoserver:latest
This Dockerfile can be used to create images for all geoserver versions since 2.5.
- Debian based Linux
- OpenJDK 11
- Tomcat 9
- GeoServer
- Support of custom fonts (e.g. for SLD styling)
- CORS support
- Support extensions
- Support additional libraries
To pull an official image use docker.osgeo.org/geoserver:{{VERSION}}
, e.g.:
docker pull docker.osgeo.org/geoserver:2.22.0
Afterwards you can run the pulled image locally with:
docker run -it -p 80:8080 docker.osgeo.org/geoserver:2.22.0
Or if you want to start the container daemonized, use e.g.:
docker run -d -p 80:8080 docker.osgeo.org/geoserver:2.22.0
Check http://localhost/geoserver to see the geoserver page,
and login with geoserver default admin:geoserver
credentials.
IMPORTANT NOTE: Please change the default geoserver
and master
passwords.
For more information see the user-guide docker installation instructions.
To use an external folder as your geoserver data directory.
docker run -it -p 80:8080 \
--mount src="/absolute/path/on/host",target=/opt/geoserver_data/,type=bind \
docker.osgeo.org/geoserver:2.22.0
An empty data directory will be populated on first use. You can easily update GeoServer while using the same data directory.
This image populates /opt/geoserver_data/
with demo data by default. For production scenarios this is typically not desired.
The environment variable SKIP_DEMO_DATA
can be set to true
to create an empty data directory.
docker run -it -p 80:8080 \
--env SKIP_DEMO_DATA=true \
docker.osgeo.org/geoserver:2.22.0
By default, the ROOT webapp is not available which makes requests to the root endpoint "/" return a 404 error.
The environment variable ROOT_WEBAPP_REDIRECT
can be set to true
to issue a permanent redirect to the web interface.
The startup.sh
script allows some customization on startup:
INSTALL_EXTENSIONS
totrue
to download and install extensionsSTABLE_EXTENSIONS
list of extensions to download and installCORS_ENABLED
Example installing wps and ysld extensions:
docker run -it -p 80:8080 \
--env INSTALL_EXTENSIONS=true --env STABLE_EXTENSIONS="wps,ysld" \
docker.osgeo.org/geoserver:2.22.0
The list of extensions (taken from SourceForge download page):
app-schema gdal jp2k ogr-wps web-resource
authkey geofence libjpeg-turbo oracle wmts-multi-dimensional
cas geofence-server mapml params-extractor wps-cluster-hazelcast
charts geopkg-output mbstyle printing wps-cluster-hazelcast
control-flow grib mongodb pyramid wps-download
css gwc-s3 monitor querylayer wps-jdbc
csw h2 mysql sldservice wps
db2 imagemap netcdf-out sqlserver xslt
dxf importer netcdf vectortiles ysld
excel inspire ogr-wfs wcs2_0-eo
If you want to add geoserver extensions/libs, place the respective jar files in a directory and mount it like
docker run -it -p 80:8080 \
--mount src="/dir/with/libs/on/host",target=/opt/additional_libs,type=bind \
docker.osgeo.org/geoserver:2.22.0
If you want to add custom fonts (the base image only contains 26 fonts) by using a mount:
docker run -it -p 80:8080 \
--mount src="/dir/with/fonts/on/host",target=/opt/additional_fonts,type=bind \
docker.osgeo.org/geoserver:2.22.0
Note: Do not change the target value!
To watch geoserver.log
of a running container:
docker exec -it {CONTAINER_ID} tail -f /opt/geoserver_data/logs/geoserver.log
The docker-compose-demo.yml
to build with your own data directory and extensions.
Stage geoserver data directory contents into geoserver_data
, and any extensions into additional_libs
folder.
Run docker-compose
:
docker-compose -f docker-compose-demo.yml up --build
docker build -t {YOUR_TAG} .
After building run using local tag:
docker run -it -p 80:8080 {YOUR_TAG}
docker build \
--build-arg GS_VERSION={YOUR_VERSION} \
-t {YOUR_TAG} .
docker build \
--build-arg GS_DATA_PATH={RELATIVE_PATH_TO_YOUR_GS_DATA} \
-t {YOUR_TAG} .
Note: The passed path must not be absolute! Instead, the path should be within the build context (e.g. next to the Dockerfile) and should be passed as a relative path, e.g. GS_DATA_PATH=./my_data/
Yes! Just pass the --build-arg
param twice, e.g.
docker build \
--build-arg GS_VERSION={VERSION} \
--build-arg GS_DATA_PATH={PATH} \
-t {YOUR_TAG} .
Put your *.jar
files (e.g. the WPS extension) in the additional_libs
folder and build with one of the commands from above! (They will be copied to the GeoServer WEB-INF/lib
folder during the build.)
Note: Similar to the GeoServer data path from above, you can also configure the path to the additional libraries by passing the ADDITIONAL_LIBS_PATH
argument when building:
docker build \
--build-arg ADDITIONAL_LIBS_PATH={RELATIVE_PATH_TO_YOUR_LIBS}
-t {YOUR_TAG} .
OSGeo maintains geoserver-docker.osgeo.org repository for publishing. The results are combined into docker.osgeo.org repository alongside other software such as PostGIS.
Build locally:
docker build -t geoserver-docker.osgeo.org/geoserver:2.22.0 .
Login using with osgeo user id:
docker login geoserver-docker.osgeo.org
Push to osgeo repository:
docker push geoserver-docker.osgeo.org/geoserver:2.22.0
For CI purposes, the script in the build
folder is used to simplify those steps.
The variables DOCKERUSER
and DOCKERPASSWORD
have to be set with valid credentials before this script can push the image to the osgeo repo.
You need to pass the version as first and the type as second argument, where type has to be one of build
, publish
or buildandpublish
.
Examples:
./release.sh 2.22.1 build
./release.sh 2.22.0 publish
./release.sh 2.22.1 buildandpublish