
一个运行GeoServer的简单Docker容器,受此Docker配置启发:https://github.com/eliotjordan/docker-geoserver/blob/master/Dockerfile
有多种方式将镜像获取到您的系统中:
首选方式(但初始镜像会占用较多带宽)是获取我们的Docker可信构建,命令如下:
shelldocker pull kartoza/geoserver
编辑.env文件修改构建参数:
IMAGE_VERSION=tomcat镜像标签 JAVA_HOME=与tomcat版本对应的Java主路径 WAR_URL=获取geoserver war或zip文件的默认URL STABLE_PLUGIN_URL=获取geoserver稳定版插件的URL ACTIVATE_ALL_STABLE_EXTENTIONS=指定是否构建所有稳定版插件或单个插件 ACTIVATE_ALL_COMMUNITY_EXTENTIONS=指定是否构建所有社区版插件或单个插件
shellgit clone git://github.com/kartoza/docker-geoserver cd docker-geoserver docker-compose -f docker-compose-build.yml up -d --build
如果需要使用从服务器下载的自定义GeoServer war文件构建镜像,可以通过构建参数传递war文件URL,示例:
shelldocker build --build-arg WAR_URL=http://download2.nust.na/pub4/sourceforge/g/project/ge/geoserver/GeoServer/2.13.0/geoserver-2.13.0-war.zip --build-arg GS_VERSION=2.13.0
注意:war文件版本必须与GS_VERSION参数提供的版本号匹配,否则插件和已安装的GeoServer会出现版本不匹配。
要使用特定标签的Tomcat镜像构建,将IMAGE_VERSION构建参数设置为8-jre8:查看https://hub.docker.com/_/tomcat/%E9%80%89%E6%8B%A9%E9%9C%80%E8%A6%81%E6%9E%84%E5%BB%BA%E7%9A%84%E6%A0%87%E7%AD%BE%E3%80%82
例如 VERSION=2.17.0 docker build --build-arg IMAGE_VERSION=8-jre8 --build-arg GS_VERSION=2.17.0 -t kartoza/geoserver:${VERSION} .
对于一些较新的构建,可能还需要设置JAVA_PATH(例如Apache Tomcat/9.0.36):
docker build --build-arg IMAGE_VERSION=9-jdk11-openjdk-slim --build-arg JAVA_HOME=/usr/local/openjdk-11/bin/java --build-arg GS_VERSION=2.17.0 -t kartoza/geoserver:2.17.0 .
构建过程中,resources/overlays目录的内容会被复制到镜像文件系统。例如,要包含静态Tomcat setenv.sh,在resources/overlays/usr/local/tomcat/bin/setenv.sh创建该文件。
可使用此功能将静态GeoServer目录写入/opt/geoserver/data_dir、包含额外jar文件等。
如果已有来自其他Geoserver的带有安全设置的data_dir:设置EXISTING_DATA_DIR=true。这将防止Docker修改密码。
覆盖文件会覆盖现有目标文件,请注意!
构建CORS支持
构建过程中,resources/overlays目录的内容会被复制到镜像文件系统。例如,要包含支持CORS的静态web xml web.xml,在resources/overlays/usr/local/tomcat/conf/web.xml创建该文件。
完整的环境变量列表在.env文件中指定。
镜像预装了以下稳定版插件:
如需使用其他插件,可在启动时传递环境变量激活,例如:
例如 VERSION=2.16.2 docker run -d -p 8600:8080 --name geoserver -e STABLE_EXTENSIONS=charts-plugin,db2-plugin kartoza/geoserver:${VERSION}
可传递stable_plugins.txt文件中定义的多个逗号分隔的插件。
也可激活community_plugins.txt中定义的社区插件:
例如 VERSION=2.16.2 docker run -d -p 8600:8080 --name geoserver -e COMMUNITY_EXTENSIONS=gwc-sqlite-plugin,ogr-datastore-plugin kartoza/geoserver:${VERSION}
如需使用默认数据目录进行测试,可通过环境变量SAMPLE_DATA=true激活:
例如 VERSION=2.16.2 docker run -d -p 8600:8080 --name geoserver -e SAMPLE_DATA=true kartoza/geoserver:${VERSION}
默认情况下,GeoServer使用H2数据存储配置磁盘配额。可使用PostgreSQL后端作为磁盘配额存储。
需要运行PostgreSQL数据库并链接到GeoServer实例:
docker run -d -p 5432:5432 --name db kartoza/postgis:13.0 docker run -d -p 8600:8080 --name geoserver --link db:db -e DB_BACKEND=POSTGRES -e HOST=db -e POSTGRES_PORT=5432 -e POSTGRES_DB=gis -e POSTGRES_USER=docker -e POSTGRES_PASS=docker kartoza/geoserver:2.18.0
可使用环境变量指定是否在SSL下运行GeoServer。 感谢https://github.com/AtomGraph/letsencrypt-tomcat%E6%8F%90%E4%BE%9BSSL%E8%BF%90%E8%A1%8C%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E3%80%82
如果设置环境变量SSL=true但未提供pem文件(fullchain.pem和privkey.pem),容器将生成自签名SSL证书:
例如 VERSION=2.16.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}
如果已有自己的perm文件(fullchain.pem和privkey.pem),可挂载包含密钥的目录:
例如 VERSION=2.16.2 docker run -it --name geo -v /etc/letsencrpt:/etc/letsencrypt -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并挂载包含该文件的文件夹,会转换为perm文件。
注意 使用PFX文件时,确保指定的环境变量ALIAS_KEY与生成PFX密钥时使用的ALIAS_KEY匹配。
完整的SSL变量列表:
要包含Tomcat额外组件(包括文档、示例和管理器webapp),将环境变量TOMCAT_EXTRAS设置为true:
注意 应配置环境变量TOMCAT_PASSWORD使用强密码,否则会设置默认密码。
例如 VERSION=2.16.2 docker run -it --name geoserver -e TOMCAT_EXTRAS=true -p 8600:8080 kartoza/geoserver:${VERSION}
初始化期间,镜像会运行更新密码的脚本。首次运行GeoServer时建议更改密码,但后续升级时应使用环境变量EXISTING_DATA_DIR=true,告知GeoServer使用已存在的数据目录,不更改密码。
如已下载额外字体,可将文件夹挂载到/opt/fonts路径,初始化时所有.ttf文件会复制到正确路径:
例如 VERSION=2.16.2 docker run -v fonts:/opt/fonts -p 8080:8080 -t kartoza/geoserver:${VERSION} .
还可使用以下环境变量向GeoServer传递参数:
GEOSERVER_DATA_DIR=<路径>ENABLE_JSONP=<true或false>MAX_FILTER_RULES=<整数>OPTIMIZE_LINE_WIDTH=<false或true>FOOTPRINTS_DATA_DIR=<路径>GEOWEBCACHE_CACHE_DIR=<路径>GEOSERVER_ADMIN_PASSWORD=<密码>GEOSERVER_ADMIN_USER=<用户名>GEOSERVER_FILEBROWSER_HIDEFS=<false或true>为防止点击劫持***,GeoServer默认将X-Frame-Options HTTP头设置为SAMEORIGIN。控制是否设置X-Frame-Options过滤器,默认值为true:
XFRAME_OPTIONS="true"
Tomcat属性:
-Xms和-Xmx选项INITIAL_MEMORY=<大小>:Java初始分配内存,默认2GMAXIMUM_MEMORY=<大小>:Java最大分配内存,默认4G控制流模块默认安装,用于管理GeoServer请求。如需根据资源和用例自定义,参考文档。这些选项可通过环境变量控制:
控制流属性环境变量
如果请求在队列中等待超过60秒,则不值得执行,客户端可能已放弃:
默认GeoServer用户为'admin',密码为'geoserver'。可通过环境变量GEOSERVER_ADMIN_PASSWORD和GEOSERVER_ADMIN_USER在运行时更改:
docker run --name "geoserver" -e GEOSERVER_ADMIN_USER=kartoza -e GEOSERVER_ADMIN_PASSWORD=myawesomegeoserver -p 8080:8080 -d -t kartoza/geoserver
Docker secrets
为避免在环境变量中传递敏感信息,可在部分变量后附加_FILE从容器内文件读取。这与Docker secrets结合特别有用,密码可从/run/secrets/<secret_name>加载,例如:
更多信息见[***]
目前支持GEOSERVER_ADMIN_USER和GEOSERVER_ADMIN_PASSWORD。
GeoServer支持使用JMS集群插件或ActiveMQ-broker进行集群。
本设置使用JMS集群插件,该插件使用嵌入式代理。clustering文件夹中提供了docker-compose.yml,通过共享数据目录模拟复制。
与复制相关的环境变量如下:
CLUSTERING=True - 指定是否激活集群BROKER_URL=tcp://0.0.0.0:61661 - 链接到JMS集群插件提供的内部代理,(主节点)的值不同READONLY=disabled - 确定GeoServer实例是否为只读RANDOMSTRING=87ee2a9b6802b6da_master - 用于为每个实例创建唯一的CLUSTER_CONFIG_DIRINSTANCE_STRING=d8a167a4e61b5415ec263 - 用于区分集群实例名称CLUSTER_DURABILITY=falseTOGGLE_MASTER=true - 区分实例是否为主节点TOGGLE_SLAVE=true - 区分实例是否为节点EMBEDDED_BROKER=disabled - 节点应禁用注意: 可能希望使用docker-compose运行,因为它提供可重复的编排部署系统。
我们提供示例docker-compose.yml文件,说明如何建立GeoServer + PostGIS。
如果对备份感兴趣,按照https://github.com/kartoza/docker-pg-backup/blob/master/docker-compose.yml#L23%E7%9A%84%E8%AF%B4%E6%98%8E%E5%9C%A8%60docker-compose.yml%60%E4%B8%AD%E6%B7%BB%E5%8A%A0%E9%83%A8%E5%88%86%E3%80%82
如果使用compose文件启动堆栈,确保使用用户名:admin和密码:myawesomegeoserver登录GeoServer。
注意: 用户名和密码在.env文件中指定,建议更改为更安全的值。
请阅读docker-compose文档了解docker-compose的使用和语法细节,此处不赘述。
所有服务启动后,在浏览器中访问GeoServer登录页面测试:http://localhost:8600/geoserver。
要在后台运行,按ctrl-c停止容器,然后在后台重新运行:
shelldocker-compose up -d
注意: docker-compose.yml使用基于主机的卷,因此删除容器时,所有数据将保留。使用基于主机的卷确保数据在compose文件调用之间持久化。如需删除容器数据,需运行docker-compose down -v。
运行所提供示例的更好方式是使用我们的Rancher目录GeoServer堆栈。有关如何设置和配置Rancher环境的更多详细信息,请参见[***] -> Settings菜单添加我们的Rancher目录,URL:
https://github.com/kartoza/kartoza-rancher-catalogue
保存设置后,打开Rancher环境,从目录的“Kartoza”部分设置堆栈 - 您将看到列出的GeoServer。
如果要同步GeoServer设置和数据库备份(由堆栈中的夜间备份工具创建),使用Resilio sync创建两个读写密钥:
注意: Resilio sync不是自由软件。个人免费使用。企业用户需要付费 - 详见其网站。
可尝试使用Syncthing或Seafile(免费选项)或Dropbox、Google Drive(其他商业产品)的类似方法。但这些产品都有一个限制:需要交互来注册应用程序或密钥。使用Resilio Sync可完全自动化该过程,无需用户干预。
欢迎用户为丰富此服务做出贡献。我们遵循git原则,所有拉取请求应针对develop分支,以便测试,满意后推送到master分支。
如果需要kartoza提供更多实质性帮助(因为我们在docker-geoserver上的工作和互动是无偿的),请考虑签订支持级别协议
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务