Подключить проект QGIS в контейнере docker с Postgres + Postgis в другом контейнере docker - PullRequest
0 голосов
/ 16 июня 2020

Существует проект 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

1 Ответ

0 голосов
/ 19 июня 2020

У меня получилось вот так:

  • Я подключил контейнеры QGIS и Postgis в мостовую сеть;

  • Явные IP-адреса были назначены контейнерам Postgis и Qgis;

  • Я изменил файл / etc / hosts в моем контейнере QGIS, так что вызов localhost из контейнера QGIS приведет к контейнеру Postgis.

Итак, теперь проект, развернутый на сервере QGIS, подключен к Postgis из ближайшего контейнера. YAML-код docker теперь выглядит так:

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
...