将docker容器中的QGIS项目连接到Postgres+;将GIS放在另一个docker容器中

将docker容器中的QGIS项目连接到Postgres+;将GIS放在另一个docker容器中,docker,docker-compose,postgis,qgis,Docker,Docker Compose,Postgis,Qgis,有一个qgis项目,它有一个连接到数据库并从中获取数据的层。当项目在Qgis桌面中打开时-一切都很完美-您可以在postgres(localhost:5432)中更新数据-图层将在地图上更新 有一个QGIS服务器是在docker容器中启动的。我将该项目放在qgis服务器docker容器(/etc/qgisserver)中,但该项目无法设置与另一个docker容器中的数据库的连接(localhost:5432) 我不明白如何让qgis服务器在容器内引用其localhost:5432,但却访问主机的

有一个qgis项目,它有一个连接到数据库并从中获取数据的层。当项目在Qgis桌面中打开时-一切都很完美-您可以在postgres(localhost:5432)中更新数据-图层将在地图上更新

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

我不明白如何让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容器

  • 将显式IP地址分配给Postgis和Qgis容器

  • 我已经更改了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