amd64/geonetworkGeoNetwork 是一个开源的空间参考资源目录管理系统(FOSS),用于管理空间参考资源。它提供强大的元数据编辑、搜索功能以及交互式Web地图查看器。该项目始于2001年,最初作为联合国粮农组织(FAO)、世界粮食计划署(WFP)和联合国环境规划署(UNEP)的空间数据目录系统,目前被广泛用作全球空间数据基础设施(SDI)的基础。
GeoNetwork 基于自由开源软件(FOSS)原则和国际开放标准(如ISO/TC211、OGC)构建,旨在连接空间信息社区及其数据,具有功能强大且成本低廉的特点。
!logo
| 标签 | Dockerfile链接 |
|---|---|
3.12.12, 3.12, 3 | Dockerfile |
3.12.12-postgres, 3.12-postgres, 3-postgres | Dockerfile |
4.2.14, 4.2 | Dockerfile |
4.4.9, 4.4, 4, latest | Dockerfile |
GeoNetwork 4版本需要Elasticsearch服务器存储文档索引,必须配置Elasticsearch服务器URL才能运行。建议使用与GeoNetwork版本兼容的Elasticsearch版本,具体可参考对应版本的GeoNetwork文档或pom.xml文件中的es.version属性。
以下示例展示如何快速启动GeoNetwork 4.4(最新版)用于演示,此配置在容器删除后不会保留数据。
console# 拉取所需镜像 docker pull elasticsearch:7.17.15 docker pull amd64/geonetwork:4 # 创建网络 docker network create gn-network # 启动Elasticsearch docker run -d --name my-es-host --network gn-network -e "discovery.type=single-node" elasticsearch:7.17.15 # 启动GeoNetwork docker run --name geonetwork-host --network gn-network -e GN_CONFIG_PROPERTIES="-Des.host=my-es-host -Des.protocol=http -Des.port=9200 -Des.url=[***]" -p 8080:8080 amd64/geonetwork:4
对于GeoNetwork 4.2稳定版:
consoledocker pull elasticsearch:7.17.15 docker pull amd64/geonetwork:4.2 docker network create gn-network docker run -d --name my-es-host --network gn-network -e "discovery.type=single-node" elasticsearch:7.17.15 docker run --name geonetwork-host --network gn-network -e ES_HOST=my-es-host -e ES_PROTOCOL=http -e ES_PORT=9200 -p 8080:8080 amd64/geonetwork:4.2
安装后,默认用户名为admin,密码为admin。建议安装后立即更新默认密码。
Java属性(4.4.0及以上版本)
自GeoNetwork 4.4.0起,通过GN_CONFIG_PROPERTIES环境变量传递Java属性配置Elasticsearch连接:
| 参数 | 说明 | 默认值 |
|---|---|---|
-Des.host | Elasticsearch服务器主机名 | localhost |
-Des.port | Elasticsearch端口 | 9200 |
-Des.protocol | 连接协议 | http |
-Des.url | Elasticsearch完整URL | http://localhost:9200(当主机、端口或协议非默认值时为必填) |
-Des.index.records | 索引名称(多实例时需不同) | gn_records |
-Des.username | 连接Elasticsearch的用户名 | 空 |
-Des.password | 连接Elasticsearch的密码 | 空 |
-Dkb.url | Kibana URL | http://localhost:5601 |
Docker Compose配置示例:
yamlservices: geonetwork: image: amd64/geonetwork:4.4 environment: GN_CONFIG_PROPERTIES: >- -Des.host=elasticsearch -Des.protocol=http -Des.port=9200 -Des.url=[***] -Des.username=my_es_username -Des.password=my_es_password -Dkb.url=[***]
环境变量(4.2及更早版本)
4.2及更早版本使用环境变量配置Elasticsearch:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
ES_HOST | Elasticsearch服务器主机名(必填) | - |
ES_PORT | Elasticsearch端口 | 9200 |
ES_PROTOCOL | 连接协议 | http |
ES_INDEX_RECORDS | 索引名称 | gn_records |
ES_USERNAME | 连接用户名 | 空 |
ES_PASSWORD | 连接密码 | 空 |
KB_URL | Kibana URL | http://localhost:5601 |
默认情况下,GeoNetwork使用本地H2数据库(不推荐用于生产环境)。镜像包含PostgreSQL和MySQL的JDBC驱动,可通过以下环境变量配置数据库连接:
| 环境变量 | 说明 |
|---|---|
GEONETWORK_DB_TYPE | 数据库类型,有效值:postgres、postgres-postgis、mysql;扩展驱动后可支持db2、oracle、sqlserver等 |
GEONETWORK_DB_HOST | 数据库主机名 |
GEONETWORK_DB_PORT | 数据库端口 |
GEONETWORK_DB_NAME | 数据库名称 |
GEONETWORK_DB_USERNAME | 数据库用户名 |
GEONETWORK_DB_PASSWORD | 数据库密码 |
GEONETWORK_DB_CONNECTION_PROPERTIES | 连接字符串附加属性,如search_path=test,public&ssl=true |
数据目录用于存储自定义配置、上传文件、空间索引、缩略图等。默认H2数据库文件位置因版本而异:
/var/lib/jetty/gn.h2.db/usr/local/tomcat/gn.h2.db可通过环境变量覆盖默认值:
DATA_DIR:数据目录路径(默认/opt/geonetwork/WEB-INF/data)GEONETWORK_DB_NAME:H2数据库文件名(默认gn,从3.10.3版本开始支持)GeoNetwork 4.4.0及以上版本需通过GN_CONFIG_PROPERTIES配置数据目录:
consoledocker run --name some-geonetwork -d -p 8080:8080 -e GN_CONFIG_PROPERTIES="-Dgeonetwork.dir=/catalogue-data" -e GEONETWORK_DB_NAME=/catalogue-data/db/gn amd64/geonetwork
为确保数据在容器重启后保留,需将数据目录挂载到主机:
consoledocker run --name some-geonetwork -d -p 8080:8080 -e DATA_DIR=/catalogue-data/data -e GEONETWORK_DB_NAME=/catalogue-data/db/gn -v /host/geonetwork-docker:/catalogue-data amd64/geonetwork:3
consoledocker run --name some-geonetwork -d -p 8080:8080 -e GN_CONFIG_PROPERTIES="-Dgeonetwork.dir=/catalogue-data" -e GEONETWORK_DB_NAME=/catalogue-data/db/gn -v /host/geonetwork-docker:/catalogue-data amd64/geonetwork
GeoNetwork监听8080端口,需通过-p参数发布端口以从主机访问:
consoledocker run --name some-geonetwork -d -p 8080:8080 amd64/geonetwork
在Linux系统上,可通过http://localhost:8080/geonetwork访问GeoNetwork。
以下是使用docker compose部署GeoNetwork的完整示例:
yaml# GeoNetwork # 访问地址: "http://localhost:8080/geonetwork" # 默认用户: admin # 默认密码: admin volumes: geonetwork: esdata: pgdata: pglog: services: geonetwork: image: geonetwork:4.4 healthcheck: test: curl http://localhost:8080/ interval: 5s timeout: 5s retries: 30 restart: always volumes: - geonetwork:/catalogue-data depends_on: database: condition: service_healthy ports: - 8080:8080 environment: WEBAPP_CONTEXT_PATH: /geonetwork DATA_DIR: /catalogue-data TZ: Europe/Amsterdam JAVA_OPTS: >- --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xms512M -Xss512M -Xmx2G -XX:+UseConcMarkSweepGC -Djetty.httpConfig.requestHeaderSize=32768 -Dorg.eclipse.jetty.server.Request.maxFormContentSize=500000 -Dorg.eclipse.jetty.server.Request.maxFormKeys=4000 # 远程调试配置 # -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 GN_CONFIG_PROPERTIES: >- -Dgeonetwork.dir=/catalogue-data -Dgeonetwork.formatter.dir=/catalogue-data/data/formatter -Dgeonetwork.schema.dir=/opt/geonetwork/WEB-INF/data/config/schema_plugins -Dgeonetwork.indexConfig.dir=/opt/geonetwork/WEB-INF/data/config/index -Dgeonetwork.schemapublication.dir=/opt/geonetwork/WEB-INF/data/resources/schemapublication -Dgeonetwork.htmlcache.dir=/opt/geonetwork/WEB-INF/data/resources/htmlcache -Des.host=elasticsearch -Des.protocol=http -Des.port=9200 -Des.url=[***] -Des.username= -Des.password= -Dgeonetwork.ESFeaturesProxy.targetUri=[***]{_} -Dgeonetwork.HttpDashboardProxy.targetUri=[***] GEONETWORK_DB_TYPE: postgres-postgis GEONETWORK_DB_HOST: database GEONETWORK_DB_PORT: 5432 GEONETWORK_DB_NAME: geonetwork GEONETWORK_DB_USERNAME: geonetwork GEONETWORK_DB_PASSWORD: geonetwork database: image: postgis/postgis:16-3.4 environment: POSTGRES_USER: geonetwork POSTGRES_PASSWORD: geonetwork POSTGRES_DB: geonetwork command: [postgres, -c, log_statement=all, -c, logging_collector=true, -c, log_file_mode=0644, -c, log_directory=/var/log/postgresql, -c, log_filename=postgresql.log] healthcheck: test: [CMD-SHELL, pg_isready -U postgres] interval: 5s timeout: 5s retries: 5 volumes: - pgdata:/var/lib/postgresql/data - pglog:/var/log/postgresql elasticsearch: image: elasticsearch:7.17.15 ports: - 9200:9200 ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 healthcheck: test: curl -s http://localhost:9200 >/dev/null || exit 1 interval: 10s timeout: 2s retries: 10 start_period: 2m environment: ES_JAVA_OPTS: -Xms1G -Xmx1G discovery.type: single-node volumes: - esdata:/usr/share/elasticsearch/data kibana: image: kibana:7.17.15 environment: SERVER_NAME: kibana ELASTICSEARCH_URL: [***] SERVER_BASEPATH: /geonetwork/dashboards SERVER_REWRITEBASEPATH: 'false' KIBANA_INDEX: .dashboards XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED: 'true' depends_on: elasticsearch: condition: service_healthy
启动命令:
consoledocker compose up
完全初始化后,通过http://localhost:8080/geonetwork访问服务。
geonetwork:<version>默认镜像,适合大多数使用场景。首次启动时会配置并创建H2数据库。如需要其他数据库引擎,可参考数据库配置部分。
geonetwork:postgres(仅GeoNetwork 3系列)此镜像支持使用PostgreSQL作为数据库引擎。容器启动时会创建数据库并由GeoNetwork初始化数据。注意:此镜像不包含PostgreSQL服务器本身,需连接外部PostgreSQL实例或容器。
需注入以下环境变量配置连接:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
POSTGRES_DB_HOST | PostgreSQL主机名(必填) | - |
POSTGRES_DB_PORT | PostgreSQL端口 | 5432 |
POSTGRES_DB_NAME | 数据库名称(不存在时会尝试创建) | - |
POSTGRES_DB_USERNAME | PostgreSQL用户名(需有创建数据库权限) | - |

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务