Docker安装部署PostGIS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker安装部署PostGIS相关的知识,希望对你有一定的参考价值。

参考技术A 1、首先安装docker
yum install -y docker
2、访问Docker官网镜像网站,搜索postgis,访问地址: https://hub.docker.com/search?q=postgis
拉取镜像: docker pull postgis/postgis
3、根据上一步拉取的镜像,创建容器,运行命令: docker run --name postgis --restart always -e POSTGRES_PASSWORD='密码' -v /home/postgis:/var/lib/postgresql/data --privileged=true -p 5432:5432 -d postgis/postgis
4、修改配置项,详情的参数配置可参考( https://github.com/digoal/blog/blob/master/201812/20181203_01.md )
docker cp postgis:/var/lib/postgresql/data/pg_hba.conf /home
docker cp /home/pg_hba.conf postgis:/var/lib/postgresql/data
docker cp postgis:/var/lib/postgresql/data/postgresql.conf /home
docker cp /home/postgresql.conf postgis:/var/lib/postgresql/data
5、docker命令大全可参考: https://www.runoob.com/docker/docker-command-manual.html

如何在 docker 中为 postgresql 创建 postgis 扩展?

【中文标题】如何在 docker 中为 postgresql 创建 postgis 扩展?【英文标题】:How to create postgis extension for postgresql in docker? 【发布时间】:2015-02-17 07:41:06 【问题描述】:

我在尝试创建 postgis 扩展时遇到错误。

这是我的 dockerfile 的样子。

    from postgres
RUN apt-get update && apt-get install postgis -y
ADD /create_postgis_extension.sh /docker-entrypoint-initdb.d/

create.bla-bla..sh

#!/bin/sh
POSTGRES="gosu postgres postgres"

$POSTGRES --single -E <<EOSQL
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
EOSQL

这是运行图像时的错误

backend> 语句:CREATE EXTENSION postgis;

错误:类型 addbandarg[] 不存在 声明:创建扩展 postgis;

backend> 语句:CREATE EXTENSION postgis_topology;

后端> 错误:未安装所需的扩展“postgis”

我显然做错了什么,但我不知道是什么。 如果我使用 apt-get 安装了 postgis,为什么没有安装 postgis。

【问题讨论】:

Docker 上的错误是否运行?如果没有,您何时/如何调用脚本?记住 postgres 直到 entrypoint/cmd 脚本在运行时执行后才会运行。 另外,似乎其他人也这样做了:registry.hub.docker.com/u/mdillon/postgis 感谢您的评论。我已经使用了他们的一些脚本,但它仍然不起作用。你能帮忙吗? 对我来说看起来像是不兼容的 postgis/postgres 版本,但我对 postgis 一无所知,所以我真的无法提供帮助。我确实注意到链接的项目使用了 postgis 和 postgres 的特定版本。 不,它是 postgis 2.1 和 postgresql 9.3。它应该可以工作。 【参考方案1】:

---码头文件

FROM postgres:12.4

RUN apt-get update \
    && apt-get install wget -y \
    && apt-get install postgresql-12-postgis-3 -y \
    && apt-get install postgis -y

COPY ./db.sql /docker-entrypoint-initdb.d/

--- db.sql(在同一个文件夹中)

CREATE EXTENSION postgis;

【讨论】:

【参考方案2】:

我使用的是 CentOS 而不是 Debian,但遇到了同样的问题。解决方案基本上归结为使用 pg_ctl 来启动/停止 postgres。

sudo -u postgres pg_ctl start -w -D $PGDATA

sudo -u postgres createdb postgis_template -E UTF8
sudo -u postgres psql -d postgis_template -c "create extension if not exists postgis;"

sudo -u postgres pg_ctl stop -w

【讨论】:

我需要在 dockerfile 中执行此操作。这在构建图像时会起作用吗? 是的。这正是我使用此解决方案的场景。【参考方案3】:

您可能为该 postgres 安装了错误版本的 postgis? addbang[] 从 2.1.0 版本开始存在,在 2.0 和 2.1 之间存在一个问题。 RedHat 家族的这些问题较少,因为他们的更新频率较低(速度很慢......)

话虽如此。 docker-entrypoint-initdb.d 由 docker-entrypoint.sh 内部脚本管理,仅在 PGDATA 文件夹不存在时运行。 此初始化脚本能够管理一些文件:.sh、.sql 和 .sql.tar.gz。 这些由 docker 的用户 postgres 按字母顺序执行。

与其用sh做sql,不如用sql。create_postgis_extension.sql

CREATE EXTENSION IF NOT EXISTS POSTGIS;
CREATE EXTENSION IF NOT EXISTS POSTGIS_TOPOLOGY;

干净简洁

问候。

【讨论】:

以上是关于Docker安装部署PostGIS的主要内容,如果未能解决你的问题,请参考以下文章

[原]CentOS7部署PostGis

Linux 安装 postgis

无法在 Heroku CI 上安装 Postgis

如何在docker部署安装tomcat环境

docker 部署FATE

Docker Compose安装部署Jenkins