Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
    地理网络开源

  • 哪里可以获得帮助:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签及各自的 Dockerfile 链接

快速参考(续)

什么是 GeoNetwork?

GeoNetwork 是一个用于管理空间参考资源的目录应用程序。它提供强大的元数据编辑和搜索功能,以及一个交互式网络地图查看器。

地理网络(GeoNetwork)项目始于 2001 年,是为联合国粮食及农业组织(FAO)、联合国世界粮食计划署(WFP)和联合国环境规划署(UNEP)提供的空间数据目录系统。

目前,该项目在全球范围内被广泛用作空间数据基础设施的基础。

GeoNetwork 已开发出来,旨在使用一种现代架构将空间信息社区及其数据连接起来,该架构同时强大且成本低廉,基于自由和开源软件(FOSS)以及服务和协议的国际和开放标准(例如:ISO/TC211、OGC)的原则。

该项目是开源地理空间基金会(OSGeo)的一部分,可在 GeoNetwork 开源网站上找到。GeoNetwork 旨在使用一种现代架构将空间信息社区及其数据连接起来,这种架构既强大又成本低廉。

logo

如何使用此图像

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 通信的协议。可以是 httphttps
  • 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 通信的协议。可以是 httphttps
  • 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 :要使用的数据库类型。有效值为 postgrespostgres-postgismysql 。该映像可以扩展,包括其他驱动程序,并且也可以使用这些其他类型: db2h2oraclesqlserver 。需要将这些其他数据库的 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-composedocker 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

Try in PWD

运行 docker stack deploy -c stack.yml geonetwork (或 docker-compose -f stack.yml up ),等待其完全初始化,然后访问 http://swarm-ip:8080/geonetworkhttp://localhost:8080/geonetworkhttp://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/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。