将 docker 容器中的 QGIS 项目与另一个 docker 容器中的 Postgres+Postgis 连接

Connect QGIS project in docker container with Postgres+Postgis in another docker container

有一个 qgis 项目有一个层连接到数据库并从 http://localhost:5432 获取数据。在 Qgis 桌面中打开项目时 - 一切正常 - 您在 postgres (localhost:5432) 中更新数据 - 图层在地图上更新。

有一个 QGIS 服务器在 docker 容器内启动。我将项目放在 qgis-server docker 容器 (/etc/qgisserver) 中,但项目无法设置连接 (localhost:5432) 与另一个 docker 容器中的数据库。

我不明白如何使容器内的 qgis 服务器引用它的 localhost:5432 但到达主机的 localhost:5432(可以访问来自另一个容器的 postgres)。

我试过这样做但没有成功:

services:
  app_postgres:
    image: kartoza/postgis:latest
    container_name: app_postgres
    volumes:
      - ~/volumes/jhipster/app/postgresql/:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=app
      - POSTGRES_PASSWORD=app
      - POSTGRES_DBNAME=app
      - POSTGRES_MULTIPLE_EXTENSIONS=postgis,hstore,postgis_topology,postgis_raster,pgrouting
    ports:
      - 5432:5432

  qgisserver:
    image: camptocamp/qgis-server:latest
    volumes:
      - ~/qgis/projects:/etc/qgisserver
    links:
      - app_postgres:db
    ports:
      - 8380:80
    depends_on:
      - app_postgres

我这样成功了:

  • 我已经在桥接网络中连接了QGIS和Postgis容器;

  • 为 Postgis 和 Qgis 容器分配了显式 IP 地址;

  • 我已经更改了我的 QGIS 容器中的 /etc/hosts 文件,以便从 QGIS 容器调用 'localhost' 将导致 Postgis 容器。

所以现在部署在QGIS服务器上的项目从附近的容器连接到Postgis。 docker-compose YAML 现在看起来像:

version: '3.4'
services:
  db:
    image: kartoza/postgis:latest
    container_name: docker_app_postgres
    volumes:
      - ~/volumes/jhipster/app/postgresql/:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=app
      - POSTGRES_PASSWORD=app
      - POSTGRES_DBNAME=app
      - POSTGRES_MULTIPLE_EXTENSIONS=postgis,hstore,postgis_topology,postgis_raster,pgrouting
    networks:
      bridge_geo:
        ipv4_address: 172.28.1.1
    ports:
      - 5432:5432

  qgisserver:
    image: camptocamp/qgis-server:latest
    container_name: docker_app_qgis
    volumes:
      - ~/qgis/projects:/etc/qgisserver
    networks:
      bridge_geo:
        ipv4_address: 172.28.1.2
    extra_hosts:
      localhost: 172.28.1.1
    ports:
      - 8380:80
    depends_on:
      - db

networks:
  bridge_geo:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16