#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 и будет использоваться сеть хоста и сеть контейнеров