
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一个运行GeoServer的简单Docker容器,受此Docker配置启发:https://github.com/eliotjordan/docker-geoserver/blob/master/Dockerfile
有多种方式将镜像获取到您的系统中:
首选方式(但初始镜像会占用较多带宽)是获取我们的Docker可信构建,命令如下:
shelldocker pull docker.xuanyuan.run/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 docker.xuanyuan.run/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 docker.xuanyuan.run/kartoza/geoserver:${VERSION}
如需使用默认数据目录进行测试,可通过环境变量SAMPLE_DATA=true激活:
例如 VERSION=2.16.2 docker run -d -p 8600:8080 --name geoserver -e SAMPLE_DATA=true docker.xuanyuan.run/kartoza/geoserver:${VERSION}
默认情况下,GeoServer使用H2数据存储配置磁盘配额。可使用PostgreSQL后端作为磁盘配额存储。
需要运行PostgreSQL数据库并链接到GeoServer实例:
docker run -d -p 5432:5432 --name db docker.xuanyuan.run/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 docker.xuanyuan.run/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 docker.xuanyuan.run/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 docker.xuanyuan.run/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 docker.xuanyuan.run/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 docker.xuanyuan.run/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属性:
INITIAL_MEMORY=<大小>:Java初始分配内存,默认2GMAXIMUM_MEMORY=<大小>:Java最大分配内存,默认4G控制流模块默认安装,用于管理GeoServer请求。如需根据资源和用例自定义,参考http://docs.geoserver.org/latest/en/user/extensions/controlflow/index.html%E3%80%82%E8%BF%99%E4%BA%9B%E9%80%89%E9%A1%B9%E5%8F%AF%E9%80%9A%E8%BF%87%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E6%8E%A7%E5%88%B6%EF%BC%9A
控制流属性环境变量
如果请求在队列中等待超过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 docker.xuanyuan.run/kartoza/geoserver
Docker secrets
为避免在环境变量中传递敏感信息,可在部分变量后附加_FILE从容器内文件读取。这与Docker secrets结合特别有用,密码可从/run/secrets/<secret_name>加载,例如:
更多信息见https://docs.docker.com/engine/swarm/secrets/%E3%80%82
目前支持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-composehttps://docs.docker.com/compose/%E4%BA%86%E8%A7%A3%60docker-compose%60%E7%9A%84%E4%BD%BF%E7%94%A8%E5%92%8C%E8%AF%AD%E6%B3%95%E7%BB%86%E8%8A%82%EF%BC%8C%E6%AD%A4%E5%A4%84%E4%B8%8D%E8%B5%98%E8%BF%B0%E3%80%82
所有服务启动后,在浏览器中访问GeoServer登录页面测试:http://localhost:8600/geoserver%E3%80%82
要在后台运行,按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上的工作和互动是无偿的),请考虑签订支持级别协议
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务