本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
Kartoza docker-geoserver 是一个轻量的 Docker 容器,用于运行 GeoServer,其设计参考了 docker recipe。该镜像支持通过环境变量配置 GeoServer,符合 生产环境运行指南,默认使用 kartoza/postgis 作为数据库后端,也可适配其他 PostgreSQL 镜像(需调整环境变量)。
可通过以下方式获取镜像:
推荐通过 Docker 可信构建拉取镜像(首次拉取流量较大):
VERSION=2.25.2 docker pull kartoza/geoserver:$VERSION
注意:尽管镜像已打标签并通过单元测试,仍建议使用带日期的标签(如 kartoza/geoserver:$VERSION--v2024.03.31)。日期标签可在 Dockerhub 查看,对应系列的首个版本;后续修复 issues 时会覆盖原标签并生成新日期标签。
通过 docker-compose-build.yml 本地构建步骤:
git clone [***]
.env 文件中的 构建参数。cd docker-geoserver docker-compose -f docker-compose-build.yml up -d geoserver-prod --build
如需基于特定版本的 Tomcat 镜像构建,可通过 IMAGE_VERSION 构建参数指定 Tomcat 标签(参考 Dockerhub Tomcat 标签):
VERSION=2.25.2 IMAGE_VERSION=9.0.91-jdk11-temurin-focal docker build --build-arg IMAGE_VERSION=${IMAGE_VERSION} --build-arg GS_VERSION=${VERSION} -t kartoza/geoserver:${VERSION} .
部分新版本 Tomcat 需额外指定 JAVA_HOME(如 Apache Tomcat/9.0.36):
docker build --build-arg IMAGE_VERSION=9.0.91-jdk11-temurin-focal --build-arg JAVA_HOME=/usr/local/openjdk-11/bin/java --build-arg GS_VERSION=2.25.2 -t kartoza/geoserver:2.25.2 .
注意:需参考 GeoServer 文档 确认支持的 Tomcat 版本。当前构建默认使用 tomcat:9.0.91-jdk11-temurin-focal 作为基础镜像,因其依赖 libgdal-java;高于 focal 的 Tomcat 基础镜像可能缺失 GDAL 插件的 Java 绑定,导致 GDAL 插件无法使用。
Windows 构建需预先安装:
步骤:
conda config --add channels conda-forge
conda create -n geoserver-build -c conda-forge python gdal conda activate geoserver-build
.env 文件,建议使用无空格的短路径(斜杠分隔)。通过 PowerShell 获取 Java 短路径:
输出类似(New-Object -ComObject Scripting.FileSystemObject).GetFile((get-command java).Source).ShortPath
C:/PROGRA~1/Java/JDK-15~1.2/bin/java.exe,可赋值给 .env 中的 JAVA_HOME。docker-compose -f docker-compose-build.yml build --force-rm --no-cache docker-compose -f docker-compose-build.yml up -d
完整环境变量列表见 .env 文件。
容器启动时会默认激活 default_stable_extensions 中的插件,包括:
如需排除默认插件,需设置 ACTIVE_EXTENSIONS:
ACTIVE_EXTENSIONS=${默认扩展列表} - 需排除的插件
例如,排除 libjpeg-turbo-plugin:
ACTIVE_EXTENSIONS=control-flow-plugin,csw-iso-plugin,csw-plugin,gdal-plugin,inspire-plugin,monitor-plugin,pyramid-plugin,vectortiles-plugin,wps-plugin
若 ACTIVE_EXTENSIONS 未设置或为空,将默认启用 所有默认插件。
通过 STABLE_EXTENSIONS 指定 stable_plugins.txt 中的扩展(逗号分隔):
VERSION=2.25.2 docker run -d -p 8600:8080 --name geoserver -e STABLE_EXTENSIONS=charts-plugin,db2-plugin kartoza/geoserver:${VERSION}
通过 COMMUNITY_EXTENSIONS 指定 community_plugins 中的扩展(逗号分隔):
VERSION=2.25.2 docker run -d -p 8600:8080 --name geoserver -e COMMUNITY_EXTENSIONS=gwc-sqlite-plugin,ogr-datastore-plugin kartoza/geoserver:${VERSION}
镜像已预下载扩展包,如需强制下载最新社区扩展,可设置 FORCE_DOWNLOAD_COMMUNITY_EXTENSIONS=true。
注意:社区扩展问题建议先查阅上游 GeoServer 文档,若扩展不可用,需自行构建。
镜像内置示例数据(默认未激活),可通过 SAMPLE_DATA=true 启用,用于快速熟悉 GeoServer:
VERSION=2.25.2 docker run -d -p 8600:8080 --name geoserver -e SAMPLE_DATA=true kartoza/geoserver:${VERSION}
GeoServer 默认使用 HSQL 数据存储配置磁盘配额,也可改用 PostgreSQL 后端。需确保 PostgreSQL 实例可连接,并配置以下环境变量(本地测试可配合 docker-compose 中的 PostgreSQL):
DB_BACKEND=POSTGRES HOST=db POSTGRES_PORT=5432 POSTGRES_DB=gwc POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASS=${POSTGRES_PASS} SSL_MODE=allow POSTGRES_SCHEMA=public DISK_QUOTA_SIZE=5
FORCE_SSL=TRUE,GeoServer 需设置 SSL_MODE=allow。SSL_MODE 需设为 verify-full 或 verify-ca,并挂载证书至 CERT_DIR 指定目录:
SSL_CERT_FILE=/etc/certs/fullchain.pem SSL_KEY_FILE=/etc/certs/privkey.pem SSL_CA_FILE=/etc/certs/root.crt
定义矢量存储时可使用 JNDI 连接池,需设置 POSTGRES_JNDI=TRUE(默认 FALSE),并配置数据库连接参数:
POSTGRES_JNDI=TRUE HOST=${POSTGRES_HOSTNAME} POSTGRES_DB=${POSTGRES_DB} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASS=${POSTGRES_PASS}
在 GeoServer 存储配置中需设置 jndiReferenceName=java:comp/env/jdbc/postgres。
可通过环境变量启用 GeoServer SSL,实现方案参考 letsencrypt。
自签名证书:设置 SSL=true 但不提供 fullchain.pem 和 privkey.pem 时,容器会自动生成:
VERSION=2.25.2 docker run -it --name geoserver -e PKCS12_PASSWORD=geoserver -e JKS_KEY_PASSWORD=geoserver -e JKS_STORE_PASSWORD=geoserver -e SSL=true -p 8443:8443 -p 8600:8080 kartoza/geoserver:${VERSION}
现有证书:挂载证书目录至容器:
VERSION=2.25.2 docker run -it --name geo -v /etc/certs:/etc/certs -e PKCS12_PASSWORD=geoserver -e JKS_KEY_PASSWORD=geoserver -e JKS_STORE_PASSWORD=geoserver -e SSL=true -p 8443:8443 -p 8600:8080 kartoza/geoserver:${VERSION}
PFX 文件:将 PFX 文件重命名为 certificate.pfx 并挂载,容器会自动转换为 PEM 文件。需确保 ALIAS_KEY 与生成 PFX 时一致。
完整 SSL 变量见 SSL 设置。
如需服务器返回完整代理 URL,需配置:
HTTP_PROXY_NAME=foo.org HTTP_PROXY_PORT=80
若通过 NGINX 反向代理 SSL,需设置:
HTTP_PROXY_NAME=foo.org HTTP_SCHEME=https
避专属域名表单发送不安全的 HTTP 请求(参考 登录问题)。SSL 连接还可配置 HTTPS_PROXY_NAME、HTTPS_PROXY_PORT、HTTPS_SCHEME。
设置 TOMCAT_EXTRAS=true 可保留 Tomcat 文档、示例和管理应用。注意:启用时需设置强密码 TOMCAT_PASSWORD,否则将生成随机密码:
VERSION=2.25.2 docker run -it --name geoserver -e TOMCAT_EXTRAS=true -p 8600:8080 kartoza/geoserver:${VERSION}
若 TOMCAT_EXTRAS=false,根路径("/")请求返回 404。需重定向至 GeoServer 路径("/geoserver/web")时,设置 ROOT_WEBAPP_REDIRECT=true。
从低版本迁移至高版本且无需更新管理员密码时,需设置 EXISTING_DATA_DIR(值可任意,如 EXISTING_DATA_DIR=foo),跳过启动时的密码初始化。
本地字体:挂载字体目录至 /opt/fonts,容器会自动复制 .ttf 或 .otf 文件:
VERSION=2.25.2 docker run -v fonts:/opt/fonts -p 8080:8080 -t kartoza/geoserver:${VERSION}
Google Fonts:通过 GOOGLE_FONTS_NAMES 指定字体(逗号分隔):
VERSION=2.25.2 docker run -e GOOGLE_FONTS_NAMES=actor,akronim -p 8080:8080 -t kartoza/geoserver:${VERSION}
以下为常用变量(完整列表见 Generic Env variables):
GEOSERVER_DATA_DIR:数据目录路径ENABLE_JSONP:是否启用 JSONP(true/false)MAX_FILTER_RULES:最大过滤规则数(整数)INITIAL_MEMORY:Java 初始内存(默认 2G)MAXIMUM_MEMORY:Java 最大内存(默认 4G)控制流模块用于管理 GeoServer 请求,参数说明见 文档。支持的环境变量示例:
REQUEST_TIMEOUT=60 PARALLEL_REQUEST=100 GETMAP=10 WPS_REQUEST=1000/d;30s
通过环境变量动态修改,容器启动时会重新初始化:
docker run --name "geoserver" -e GEOSERVER_ADMIN_USER=kartoza -e GEOSERVER_ADMIN_PASSWORD=myawesomegeoserver -p 8080:8080 -d -t kartoza/geoserver
若未设置 GEOSERVER_ADMIN_PASSWORD,容器会生成随机密码并输出至启动日志。
注意:升级时需挂载 settings:/settings 卷,确保 update_password.sh 生成的锁文件持久化(参考 docker-compose-build 示例)。
敏感信息可通过 _FILE 后缀从文件读取(适用于 Docker Secrets),例如:
-e GEOSERVER_ADMIN_PASSWORD_FILE=/run/secrets/geoserver_pass
支持的变量包括 GEOSERVER_ADMIN_USER、GEOSERVER_ADMIN_PASSWORD、TOMCAT_PASSWORD、PKCS12_PASSWORD 等。
通过 GEOSERVER_CONTEXT_ROOT 自定义 GeoServer 部署路径:
GEOSERVER_CONTEXT_ROOT=my-geoserver
示例中 GeoServer 会部署至 [***] [***] 中用 # 分隔):
GEOSERVER_CONTEXT_ROOT=foo#my-geoserver
此时部署路径为 `[***]
可将配置文件挂载至 /settings 目录,覆盖 Build data 中的默认配置。支持挂载的文件包括:
示例:
docker run --name "geoserver" -e GEOSERVER_ADMIN_USER=kartoza -v /data/controlflow.properties:/settings/controlflow.properties -p 8080:8080 -d -t kartoza/geoserver
注意:users.xml 和 roles.xml 需同时挂载,避免启动错误;挂载后会覆盖 GEOSERVER_ADMIN_USER 和 GEOSERVER_ADMIN_PASSWORD。
可挂载 bash 脚本至 /docker-entrypoint-geoserver.d/,用于修复依赖(如社区扩展 集群问题):
-v ./run.sh:/docker-entrypoint-geoserver.d/run.sh
镜像默认启用 CORS,如需自定义可挂载 web.xml 至 /settings/。
GeoServer 支持基于 JMS 集群插件的集群部署,详细配置见 kartoza 集群文档。


免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429