docker 部署带postgis扩展的postgresql

环境:Ubuntu 16
docker: 18.06.1-ce

使用 kartoza/postgis 镜像安装,github地址

  1. 拉取镜像
docker pull kartoza/postgis

这个是拉取最新的(即 lastest ),当然也可以指定版本:
kartoza/postgis:[postgres_version]-[postgis-version]
当前最近几个组合版本有:

  • 11.0-2.5
  • 10.0-2.4
  • 9.6-2.4
# 例如:拉取 postgresql 9.6 版本以及postgis 2.4 版本
docker pull kartoza/postgis:9.6-2.4

另外,还可以通过github源码进行构建,不做详细展开

docker build -t kartoza/postgis git://github.com/kartoza/docker-postgis
  1. 跑起来
$ docker run -d --name postgresql2 --restart always -e POSTGRES_USER=abcuser -e POSTGRES_PASS='abc123' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /docker_root/postgresql11-docker:/var/lib/postgresql -v /4T/tmp:/tmp/tmp -p 55433:5432 -t kartoza/postgis

其中

  • -e ALLOW_IP_RANGE=0.0.0.0/0,这个表示允许所有ip访问,如果不加,则非本机 ip 访问不了
  • -e POSTGRES_USER=abcuser 用户名
  • -e POSTGRES_PASS=‘abc123’ 指定密码

其他阅读官方文档

附上其他几个额外问题:

  1. 该镜像的数据库默认 SQL_ASCII,中文会显示乱码
    解决方案:改为UTF8(改完能正常显示),网上也有说改成GBK(没试过)
    查看编码情况(终端psql或者pgAdmin都可执行):
    pg_encoding
    将SQL_ASCII改成UTF8,可以通过SQL语句执行
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'yourDbName'

其中,yourDbName,是数据库名称

  1. 查看 pg 版本
    有时想看看安装的到底是什么版本
show server_version;
# 或者
select version();

以上两条语句任选一条即可

此外,另外一个镜像 mdillon/postgis:11-alpine,这个镜像不需要修改编码

踩坑:

/docker_root/postgresql11-docker/11/main,这个文件路径正是数据库映射出来的路径(数据库数据都在于此),之前为了查看里面的东西,将其权限设置为777,后面数据库重启则重启不了。再将其设置为700(sudo chmod -R 700 main),才启动成功

$ ls -ld main
drwx------ 19 systemd-resolve systemd-resolve 4096 417 10:26 main/

2024-01-22 写的话:
以上方法是2019年,有点过时。
推荐官方镜像 postgis/postgis,例如11版本带postgis3.3版本,postgis/postgis:11-3.3

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Docker是一种容器化技术,可以将应用程序和它所依赖的所有库和配置打包成一个可移植的容器,以便在不同的环境中部署和运行。PostGIS是一个开源的空间地理数据库扩展,它可以用来存储和处理地理空间数据。高斯投影是一种经典的地理投影方式,用于将地球表面上的经纬度坐标转换为平面坐标。 要在Docker部署高斯投影的PostGIS,你可以按照以下步骤操作: 1. 首先,在本地计算机上安装Docker,并确保Docker已经成功运行。 2. 在Docker中拉取PostGIS镜像: ``` docker pull mdillon/postgis ``` 3. 创建一个新的Docker容器,并将PostGIS镜像作为基础镜像: ``` docker run --name my-postgis -e POSTGRES_PASSWORD=mysecretpassword -d mdillon/postgis ``` 这个命令会创建一个名为my-postgis的新容器,并在其中启动一个PostGIS服务器实例。 4. 进入到新创建的容器中,并运行psql命令以连接到PostGIS数据库: ``` docker exec -it my-postgis bash psql -U postgres ``` 5. 在psql中创建一个新的空间数据库,并启用PostGIS扩展: ``` CREATE DATABASE myspatialdb; \c myspatialdb; CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; ``` 6. 创建一个新的高斯投影空间数据库: ``` CREATE DATABASE mygaussiandb; \c mygaussiandb; CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; CREATE EXTENSION postgis_sfcgal; ``` 7. 在新创建的高斯投影空间数据库中创建一个新的高斯投影坐标系: ``` INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) VALUES (99999, 'EPSG', 99999, '+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ', 'PROJCS["Gauss-Kruger / Xian 1980 3-degree Gauss-Kruger zone 37",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["Xian 1980",6378140,298.257]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]]]'); ``` 8. 现在你已经成功地在Docker部署了高斯投影的PostGIS。你可以在本地计算机上使用psql或其他工具连接到该数据库,并开始存储和处理空间数据。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值