快速参考
-
由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
地理网络开源 -
哪里可以获得帮助:
Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow
支持的标签及各自的 Dockerfile 链接
快速参考(续)
-
在哪里提交问题:
https://github.com/geonetwork/docker-geonetwork/issues -
已发布的图像伪影细节:
repo-info repo 的repos/geonetwork/目录(历史记录)
(图像元数据、传输大小等) -
图像更新:
官方图像仓库的library/geonetwork标签
官方图像存储库的library/geonetwork文件(历史记录) -
此描述的来源:
文档库的geonetwork/目录(历史记录)
什么是 GeoNetwork?
GeoNetwork 是一个用于管理空间参考资源的目录应用程序。它提供强大的元数据编辑和搜索功能,以及一个交互式网络地图查看器。
地理网络(GeoNetwork)项目始于 2001 年,是为联合国粮食及农业组织(FAO)、联合国世界粮食计划署(WFP)和联合国环境规划署(UNEP)提供的空间数据目录系统。
目前,该项目在全球范围内被广泛用作空间数据基础设施的基础。
GeoNetwork 已开发出来,旨在使用一种现代架构将空间信息社区及其数据连接起来,该架构同时强大且成本低廉,基于自由和开源软件(FOSS)以及服务和协议的国际和开放标准(例如:ISO/TC211、OGC)的原则。
该项目是开源地理空间基金会(OSGeo)的一部分,可在 GeoNetwork 开源网站上找到。GeoNetwork 旨在使用一种现代架构将空间信息社区及其数据连接起来,这种架构既强大又成本低廉。

如何使用此图像
GeoNetwork 4 使用 Elasticsearch 服务器来存储其管理的文档索引,因此如果不配置 Elasticsearch 服务器的 URL,它就无法运行。
这是一个如何为演示目的快速设置并运行 GeoNetwork 4.4 最新版的简单示例。此配置在删除容器时不会保留数据。
docker pull elasticsearch:7.17.15
docker pull geonetwork:4
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 GN_CONFIG_PROPERTIES="-Des.host=my-es-host -Des.protocol=http -Des.port=9200 -Des.url=http://my-es-host:9200" -p 8080:8080 geonetwork:4
对于 GeoNetwork 4.2 稳定版:
docker pull elasticsearch:7.17.15
docker pull 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 geonetwork:4.2
要确定使用哪个 Elasticsearch 版本,您可以查看您的 GeoNetwork 版本的 GeoNetwork 文档,或所使用的 GeoNetwork 发行版的 pom.xml 文件中的 es.version 属性。
默认凭据
安装后,使用默认凭据: admin (用户名)和 admin (密码)。建议在安装后更新默认密码。
Elasticsearch 配置
Java 属性(版本 4.4.0 及更新版本)
自 GeoNetwork 4.4.0 起,使用在 GN_CONFIG_PROPERTIES 环境变量中传递的 Java 属性进行 Elasticsearch 连接配置:
es.host:可选(默认localhost):Elasticsearch 服务器的主机名。es.port可选(默认9200):Elasticsearch 服务器监听的端口。es.protocol可选(默认http):用于与 Elasticsearch 通信的协议。可以是http或https。es.url:如果主机、端口或协议不是默认值(默认http://localhost:9200),则为必填项:Elasticsearch 服务器的完整 URL。es.index.records可选(默认gn_records):如果您有多个 GeoNetwork 实例使用同一个 Elasticsearch 集群,那么每个实例都需要使用不同的索引名称。使用此变量来定义每个 GeoNetwork 所使用的索引名称。es.username可选(默认值为空):用于连接到 Elasticsearch 的用户名。es.password可选(默认值为空):用于连接到 Elasticsearch 的密码。kb.url可选(默认http://localhost:5601):Kibana 正在监听的 URL 所在之处。
示例 Docker Compose YAML 代码片段:
services:
geonetwork:
image: geonetwork:4.4
environment:
GN_CONFIG_PROPERTIES: >-
-Des.host=elasticsearch
-Des.protocol=http
-Des.port=9200
-Des.url=http://elasticsearch:9200
-Des.username=my_es_username
-Des.password=my_es_password
-Dkb.url=http://kibana:5601
环境变量(版本 4.2 及更早版本)
对于版本早于 4.4.0 的情况,使用环境变量来配置 Elasticsearch:
ES_HOST强制要求:Elasticsearch 服务器的主机名。ES_PORT可选(默认9200):Elasticsearch 服务器监听的端口。ES_PROTOCOL可选(默认http):用于与 Elasticsearch 通信的协议。可以是http或https。ES_INDEX_RECORDS可选(默认gn_records):如果您有多个 GeoNetwork 实例使用同一个 Elasticsearch 集群,那么每个实例都需要使用不同的索引名称。使用此变量来定义每个 GeoNetwork 所使用的索引名称。ES_USERNAME可选(默认值为空):用于连接到 Elasticsearch 的用户名。ES_PASSWORD可选(默认值为空):用于连接到 Elasticsearch 的密码。KB_URL可选(默认http://localhost:5601):Kibana 正在监听的 URL 所在之处。
数据库配置
默认情况下,GeoNetwork 使用本地 H2 数据库进行演示用途(不建议将此用于生产环境)。该映像包含用于 PostgreSQL 和 MySQL 的 JDBC 驱动程序。要配置数据库连接,请使用以下环境变量:
GEONETWORK_DB_TYPE:要使用的数据库类型。有效值为postgres、postgres-postgis、mysql。该映像可以扩展,包括其他驱动程序,并且也可以使用这些其他类型:db2、h2、oracle、sqlserver。需要将这些其他数据库的 JAR 驱动程序添加到/opt/geonetwork/WEB-INF/lib,将它们作为绑定挂载或扩展官方映像。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将生成像jdbc:postgresql://localhost:5432/postgres?search_path=test,public&ssl=true这样的 JDBC 连接字符串
启动 GeoNetwork
此命令将启动一个基于 Debian 的容器,运行一个 Tomcat(GN 3)或 Jetty(GN 4)网络服务器,并在该服务器上部署一个 GeoNetwork WAR:
docker run --name some-geonetwork -d geonetwork
发布端口
GeoNetwork 在端口 8080 上进行监听。如果您想在主机上访问该容器,则必须发布此端口。例如,这将把容器在端口 8080 上的所有流量重定向到主机上的相同端口:
docker run --name some-geonetwork -d -p 8080:8080 geonetwork
然后,如果您在 Linux 上运行 Docker,您可以通过 http://localhost:8080/geonetwork 访问 Geonetwork。否则,将 localhost 替换为您的 Docker 机器的地址。
设置数据目录和 H2 数据库文件
数据目录是文件系统上的一个位置,目录在其中存储其大量自定义配置和上传的文件。它也是存储许多用于各种目的(例如:空间索引、缩略图)的支持文件的位置。默认变体还使用本地 H2 数据库来存储元数据目录本身。
默认情况下,GeoNetwork 将数据目录设置在 /opt/geonetwork/WEB-INF/data 上,将 H2 数据库文件设置到 Jetty 目录 /var/lib/jetty/gn.h2.db (自 GN 4.0.0 起)或 Tomcat /usr/local/tomcat/gn.h2.db (对于 GN 3),但您可以通过向容器中注入环境变量来覆盖这些值: - -e DATA_DIR=... (默认为 /opt/geonetwork/WEB-INF/data )和 -e GEONETWORK_DB_NAME=... (默认为 gn ,它在 Tomcat 的 bin 目录 /usr/local/tomcat 中设置数据库 gn.h2.db )。请注意,通过 GEONETWORK_DB_NAME 设置数据库位置仅从 3.10.3 版本起生效。
自版本 4.4.0 起,需要使用在 GN_CONFIG_PROPERTIES 环境变量中传递的 Java 属性来配置数据目录。例如:
docker run --name some-geonetwork -d -p 8080:8080 -e GN_CONFIG_PROPERTIES="-Dgeonetwork.dir=/catalogue-data" -e GEONETWORK_DB_NAME=/catalogue-data/db/gn geonetwork
持久化数据
要将数据目录设置为 /catalogue-data/data 且将 H2 数据库文件设置为 /catalogue-data/db/gn.h2.db ,以便它们在重新启动后仍然存在:
-
GeoNetwork 4.2 及更早版本
docker run --name some-geonetwork -d -p 8080:8080 -e DATA_DIR=/catalogue-data/data -e GEONETWORK_DB_NAME=/catalogue-data/db/gn geonetwork:3
-
自 GeoNetwork 4.4.0 起
docker run --name some-geonetwork -d -p 8080:8080 -e GN_CONFIG_PROPERTIES="-Dgeonetwork.dir=/catalogue-data" -e GEONETWORK_DB_NAME=/catalogue-data/db/gn geonetwork
如果您希望数据目录在重启后甚至容器销毁后仍然存在,可以将 Docker 引擎主机上的目录挂载到容器中。 - -v /host/path:/path/to/data/directory 。例如,这将把主机目录 /host/geonetwork-docker 挂载到容器上的 /catalogue-data :
-
GeoNetwork 4.2 及更早版本
docker 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 geonetwork:3
-
GeoNetwork 4.4.0 及更高版本
docker 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 geonetwork
...通过 docker-compose 或 docker stack deploy
示例 docker-compose.yml 用于 geonetwork :
# GeoNetwork
#
# Access via "http://localhost:8080/geonetwork" (or "http://$(docker-machine ip):8080/geonetwork" if using docker-machine)
#
# Default user: admin
# Default password: admin
version: '3.8'
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
# For remote debug
# -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=http://elasticsearch:9200
-Des.username=
-Des.password=
-Dgeonetwork.ESFeaturesProxy.targetUri=http://elasticsearch:9200/gn-features/{_}
-Dgeonetwork.HttpDashboardProxy.targetUri=http://kibana:5601
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: http://elasticsearch:9200/
SERVER_BASEPATH: /geonetwork/dashboards
SERVER_REWRITEBASEPATH: 'false'
KIBANA_INDEX: .dashboards
XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED: 'true'
depends_on:
elasticsearch:
condition: service_healthy
运行 docker stack deploy -c stack.yml geonetwork (或 docker-compose -f stack.yml up ),等待其完全初始化,然后访问 http://swarm-ip:8080/geonetwork 、 http://localhost:8080/geonetwork 或 http://host-ip:8080/geonetwork (视情况而定)。
默认凭据
安装后,会创建一个默认用户,用户名是 admin ,密码是 admin 。使用此凭据开始。建议在安装后更新默认密码。
图像变体
geonetwork 图像有多种类型,每种都针对特定的用例而设计。
geonetwork:<version>
这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。
默认情况下,当应用程序首次启动时,会配置并创建一个 H2 数据库。如果您对除 H2 以外的数据库引擎感兴趣,请查看其他镜像变体。
geonetwork:postgres (仅适用于 GeoNetwork 3 系列)
此图像为将 PostgreSQL 用作地理网络的数据库引擎提供支持。当您启动容器时,会创建一个数据库,并且一旦地理网络启动,该数据库就会被地理网络填充数据。
请注意,此映像本身并不附带 postgres 数据库服务器,但它为您提供了链接到运行 postgres 的容器的选项,或者使用其 IP 地址连接到 postgres 实例的选项。如果您正在寻找包括数据库引擎在内的 geonetwork 自包含安装,请查看默认映像变体。
为了从地理网络设置连接,您必须将以下变量注入到容器中: - POSTGRES_DB_USERNAME :您的数据库服务器上的 PostgreSQL 用户(必须具有创建数据库的权限) - POSTGRES_DB_PASSWORD :您的数据库服务器上的 PostgreSQL 密码
如果您的 PostgreSQL 实例正在非标准端口上监听,则您还必须设置该变量: - POSTGRES_DB_PORT :您的数据库服务器上的 PostgreSQL 端口(默认为 5432 )
连接到一个 PostgreSQL 数据库
如果您想要连接到一个 PostgreSQL 服务器,您需要传递一个额外的环境变量, POSTGRES_DB_HOST ,其中包含该服务器的地址。
如果您想要连接到外部数据库服务器,您可以使用 IP 地址或 DNS 作为 POSTGRES_DB_HOST 。例如,如果服务器在 mydns.net 上运行,端口为 5434 ,用户名是 postgres ,密码是 mysecretpassword :
docker run --name geonetwork -d -p 8080:8080 -e POSTGRES_DB_HOST=mydns.net -e POSTGRES_DB_PORT=5434 -e POSTGRES_DB_USERNAME=postgres -e POSTGRES_DB_PASSWORD=mysecretpassword -e POSTGRES_DB_NAME=mydbname geonetwork:postgres
如果您想在容器上运行 PostgreSQL,您可以将容器名称用作 POSTGRES_DB_HOST :只需确保容器能够相互发现,方法是在同一个用户定义的网络中运行它们。例如,您可以创建一个桥接网络:
docker network create --driver bridge mynet
然后,如果您想运行官方的 postgres 镜像,使用 some-postgres 作为容器名称,您可以像这样启动它:
docker run --name some-postgres --network=mynet -d postgres
然后您可以启动地理网络,确保您加入相同的网络,并设置所需的环境变量,包括 POSTGRES_DB_HOST :
docker run --name geonetwork -d -p 8080:8080 --network=mynet -e POSTGRES_DB_HOST=some-postgres -e POSTGRES_DB_PORT=5432 -e POSTGRES_DB_USERNAME=postgres -e POSTGRES_DB_PASSWORD=mysecretpassword -e POSTGRES_DB_NAME=mydbname geonetwork:postgres
配置环境变量
这些是一些可设置以配置数据库连接的环境变量:
POSTGRES_DB_HOST:数据库主机名。POSTGRES_DB_PORT:数据库服务器监听的端口(默认情况下为5432)。POSTGRES_DB_NAME:数据库的名称。如果该数据库不存在,容器将尝试创建它。POSTGRES_DB_USERNAME:用户名。POSTGRES_DB_PASSWORD:密码。
许可证
查看此映像中所包含软件的许可证信息。
与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。
一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 geonetwork/ 目录中找到。
对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。
