我正在使用 docker-compose 在 docker 容器中运行 postgres,它可以毫无问题地启动,并且我能够连接到数据库。但现在我想进入容器并执行postgis
shp2pgsql
来加载形状文件,但该命令似乎不存在。下面是我的代码:
docker-compose.yaml
version: '3'
services:
db:
container_name: pg_container
image: postgis/postgis
restart: always
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_DB: test_db
volumes:
- ./data:/var/lib/postgresql/
- ./postgres_init:/postgres_init
ports:
- 5433:5433
networks:
- ch_ntw
networks:
ch_ntw:
driver: bridge
ipam:
config:
- subnet: 10.222.1.0/24
进入容器:
docker exec -it pg_container bash
使用 psql 连接到数据库没有问题:
psql --host=pg_container --dbname=test_db --username=root
但是如果我尝试从 bash 调用
shp2pgsql
,我会得到以下信息:
shp2pgsql -s 2263:4326 postgres_init/nyct2010_15b/nyct2010.shp | psql -d test_db
bash: shp2pgsql: command not found
我想既然这是一个 postgis 容器,那么该功能应该是可以访问的,不是吗?
shp2pgsql
是一个客户端包。 postgis/postgis
图像仅是 PostGIS 服务器组件。如果您想使用 shp2pgsql
或其他客户端工具,请将它们本地安装在您的主机上或另一个容器中。
我决定使用相同的 postgis/postgis 图像,但在 dockerfile 中执行 am 图像,包括 postgis 安装:
创建 Docker 文件“Dockerfile-database”:
FROM postgis/postgis:latest as builder
RUN apt update
RUN apt install -y postgis
稍后你可以创建一个yml:
version: '3.8'
services:
mypostgis_db:
build:
dockerfile: Dockerfile-database
context: .
args:
- no-cache
environment:
- POSTGRES_PASSWORD=mypassword
- POSTGRES_DB=mydbname
ports:
- 5432:5432
最后就可以运行创建的yml服务了:
docker-compose up --build mypostgis_db