Docker 和 Postgis - 如何访问 Docker 容器内的 shp2pgsql?

问题描述 投票:0回答:2

我正在使用 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 容器,那么该功能应该是可以访问的,不是吗?

postgresql docker docker-compose postgis
2个回答
2
投票

shp2pgsql
是一个客户端包。
postgis/postgis
图像仅是 PostGIS 服务器组件。如果您想使用
shp2pgsql
或其他客户端工具,请将它们本地安装在您的主机上或另一个容器中。


0
投票

我决定使用相同的 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
© www.soinside.com 2019 - 2024. All rights reserved.