Не удается подключиться к Postgis, работающему в docker, с Геосервера, работающего в другом docker continerer

#linux #docker #postgis #geoserver

#linux #docker #postgis #геосервер

Вопрос:

Я использовал изображения докеров kartoza’s для Geoserver и Postgis и запустил их в двух контейнерах docker, используя предоставленный docker-compose.yml:

 version: '2.1'

volumes:
   geoserver-data:
   geo-db-data:

services:
   db:
      image: kartoza/postgis:12.0
      volumes:
         - geo-db-data:/var/lib/postgresql
      ports:
        - "25434:5432"
      env_file:
      - docker-env/db.env
      restart: on-failure
      healthcheck:
        test: "exit 0"

   geoserver:
      image: kartoza/geoserver:2.17.0
      volumes:
        - geoserver-data:/opt/geoserver/data_dir
      ports:
        - "8600:8080"
      restart: on-failure
      env_file:
        - docker-env/geoserver.env
      depends_on:
        db:
          condition: service_healthy
      healthcheck:
        test: curl --fail -s http://localhost:8080/ || exit 1
        interval: 1m30s
        timeout: 10s
        retries: 3
  

Указанные файлы .env:

db.env

 POSTGRES_DB=gis,gwc
POSTGRES_USER=docker
POSTGRES_PASS=docker
ALLOW_IP_RANGE=0.0.0.0/0
  

geoserver.env

 GEOSERVER_DATA_DIR=/opt/geoserver/data_dir
ENABLE_JSONP=true
MAX_FILTER_RULES=20
OPTIMIZE_LINE_WIDTH=false
FOOTPRINTS_DATA_DIR=/opt/footprints_dir
GEOWEBCACHE_CACHE_DIR=/opt/geoserver/data_dir/gwc
GEOSERVER_ADMIN_PASSWORD=myawesomegeoserver
INITIAL_MEMORY=2G
MAXIMUM_MEMORY=4G
XFRAME_OPTIONS='false'
STABLE_EXTENSIONS=''
SAMPLE_DATA=false
GEOSERVER_CSRF_DISABLED=true
  

docker-compose up запускает и запускает оба контейнера без ошибок, присваивая им имена backend_db_1 (Postgis) и backend_geoserver_1 (Geoserver). Я могу получить доступ к Geoserver, работающему в backend_geoserver_1 under http://localhost:8600/geoserver/ , как и ожидалось. Я могу без проблем подключить внешний Postgis на основе AWS в качестве хранилища данных к экземпляру геосервера на базе docker. Я также могу получить доступ к Postgis, работающему в контейнере docker backend_db_1 , из pgAdmin, psql из командной строки и из среды IDE Webstorm.

Однако, если я попытаюсь использовать свой Postgis, работающий в backend_db_1 качестве хранилища данных для моего геосервера backend_geoserver_1 , я получаю следующую ошибку:

 > Error creating data store, check the parameters. Error message: Unable
> to obtain connection: Cannot create PoolableConnectionFactory
> (Connection to localhost:25434 refused. Check that the hostname and
> port are correct and that the postmaster is accepting TCP/IP
> connections.)
  

Итак, мой геосервер в backend_geoserver_1 может подключаться к Postgis на AWS, но не к тому, который работает в другом контейнере docker на том же локальном хосте. Доступ к Postgis backend_db_1 , в свою очередь, можно получить из многих других локальных приложений и инструментов, но не с Геосервера, работающего в контейнере docker.

Есть идеи, чего мне не хватает? Спасибо!

Ответ №1:

просто добавьте network_mode в YAML в db и geoserver и установите для него значение host

 network_mode: host
  

обратите внимание, что при этом будет игнорироваться опция expose и будет использоваться сеть хоста и сеть контейнеров