在Docker容器中安装Postgis

问题描述

我像往常一样使用postgres映像使用docker创建了一个数据库

docker run -d \       
--name some-postgres \
-e POSTGRES_PASSWORD=mypassword \
-v ${HOME}/postgres-data/:/var/lib/postgresql/data \
-p 5432:5432 \
postgres

现在我决定在其中一个表中添加一个新列,以使用Postgis存储坐标,但是当我这样做时

CREATE EXTENSION postgis;

或类似的信息,我收到此错误消息:

ERROR:  Could not open extension control file "/usr/share/postgresql/12/extension/postgis.control": No such file or directory

在运行docker容器之前是否还需要执行其他步骤以安装postgis?

非常感谢

解决方法

postgis扩展名不随Vanilla postgres一起提供,它附带了一大堆更通用的扩展名,尽管地理空间方面没有什么值得注意的。让我们看看:https://registry.hub.docker.com/r/postgis/postgis/

,

我知道已经有回复,但这可以帮助某人

============= 步骤 ==============

第 1 步 - 首先,您应该已经有一个 Postgres 映像,然后在 postgres docker 容器 运行之后。

[链接 1]:https://reachmnadeem.wordpress.com/2020/06/02/running-postgresql-database-in-docker-and-connecting-from-host-outside-container/

[链接 2] (https://dev.to/shree_j/how-to-install-and-run-psql-using-docker-41j2)!

第 2 步 - 在您应该拥有 POSTGIS DOCKER 图像

[voir ici] : https://hub.docker.com/r/kartoza/postgis/

第 3 步 - 下图显示了所有这些步骤后的配置 [此处链接]:https://i.stack.imgur.com/QuSA0.png

第 4 步 - 在你应该停止在端口 5432 上运行的 postgres 容器之后

[这可能有帮助] (https://blog.eduonix.com/software-development/learn-stop-kill-clean-docker-containers/#:~:text=To%20stop%20a%20container%20you,the%20killing%20is%2010%20seconds.)!

第 5 步 - 现在我们可以创建将我们的 postgres 容器 与我们的 postgis 扩展

链接起来的容器
sudo docker run -d --name postgis_postgres -e POSTGRES_PASSWORD=postgrespassword -e POSTGRES_USER=postgres  -v /home/judith/Documents/postgres/db-data/:/var/lib/postgresql/data  -p 8000:8000  kartoza/postgis:9.6-2.4

这里/home/judith/Documents/postgres/db-data/是postgres容器的数据库数据的路径 result of this step here

步骤 6 - 现在我们可以使用命令

进入在步骤 5 中创建的正在运行的容器
judith@jlas:~$ sudo docker exec -it postgis_postgres bash
root@544c89fadeda:/# //you will be there 

STEP 7 - 在此处编写将链接到 postgres 控制台管理员的命令 5432 是我的 postgres 容器运行的端口,postgres 是我的配置中 postgres 的管理员,您将在步骤 1 中配置数据库管理员,不用担心。

root@544c89fadeda:/# psql -h localhost -p 5432 -U postgres

you can see the result here

第 8 步 - 创建后POSTGIS EXTENSION

postgres=# CREATE EXTENSION postgis;
CREATE EXTENSION
postgres=#