我正在尝试使用 PostGIS 扩展运行本地 Postgres 数据库,然后使用 shapefile 填充数据库,而无需手动加载数据。
我有一个
docker-compose.yml
,我首先使用 postgis docker 映像并使用端口 5432。我已经在容器运行时对此进行了测试,并且可以成功连接。
第二部分,
import-shapefile
使用postgres图像并安装所需的扩展,转换shapefile并将结果添加到在postgis容器中运行的数据库中。
docker-compose.yml:
services:
postgis:
image: postgis/postgis
restart: always
env_file:
- .env
ports:
- 5432:5432
platform: linux/amd64
volumes:
- ./dataset:/dataset
import-shapefile:
image: postgres
depends_on:
- postgis
volumes:
- ./dataset:/dataset
entrypoint: sh
command: -c "apt-get update && apt-get install -y postgis && shp2pgsql -s 4326 -I -D -W UTF-8 dataset/my_shapefile.shp my_table | psql -U username -d my_db"
environment:
- POSTGRES_USER
- POSTGRES_DB
查看容器日志时,我在 import-shapefile 容器中看到错误:
sql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
有谁知道如何在 docker-compose.yml 文件中解决这个问题?
有一种更简单的方法可以仅使用一个容器来实现这一目标。您可以使用 Kartoza 著名的 PostGIS 映像,它具有一些方便的功能,例如在容器启动时加载脚本。该映像还安装了 shp2pgsql。请阅读此处。