我们一直在使用以下
docker-compose.yml
来解释 PostgreSQL(另一个经过编辑的)依赖项。
version: '3.5'
services:
postgres132:
image: postgres:13.2
restart: always
environment:
POSTGRES_PASSWORD: 'user'
POSTGRES_USER: 'pass'
POSTGRES_DB: 'db'
volumes:
- ./data/postgres:/var/lib/postgresql/data
ports:
- 5432:5432
现在,我需要向同一个容器添加 PostGIS 支持。这可能吗?我该怎么做?我对 Postgres 和 PostGIS 都很陌生,所以请原谅我对此的无知。
为什么不使用特定的 Dockerfile 来添加 postgis?
将“image”属性更改为“build”属性以链接 Dockerfile。
你的 docker-compose.yml 看起来像这样:
version: '3'
services:
db:
container_name: db
build:
context: .
dockerfile: Dockerfile-db
restart: always
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: db_name
ports:
- "5432:5432"
然后在与 docker-compose.yml 相同的路径中创建一个名为
Dockerfile-db
的文本文件,其中包含以下内容:
FROM postgres:14.1
RUN apt-get update && apt-get install -y postgresql-14-postgis-3
CMD ["/usr/local/bin/docker-entrypoint.sh","postgres"]
请注意,您可以指定与您的 Postgresql 版本一起使用的 PostGIS 版本。
这样您就可以通过扩展
Dockerfile-db
在容器中安装所需的所有内容
注意:您的数据库容器现在具有 PostGIS,但我们需要在数据库中创建扩展,为此您应该运行
CREATE EXTENSION postgis;
如果您使用卷,则只需执行一次。
奖励:一种方法是使用 init.sql 文件准备一个名为 db/ 的目录,并编写类似
CREATE EXTENSION postgis ;
的内容,并将其作为卷保存在 docker compose 中,这样 docker-compose 的最终格式将是:
version: '3'
services:
db:
container_name: db
build:
context: .
dockerfile: Dockerfile-db
restart: always
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: db_name
ports:
- "5432:5432"
volumes:
- ./db:/docker-entrypoint-initdb.d/
- database_volume:/var/lib/postgresql/data
volumes:
database_volume:
这样 postgresql 将运行这个脚本并创建你的扩展
https://hub.docker.com/r/postgis/postgis
为什么不使用上面链接中基于官方 PostgreSQL 镜像的 PostGIS 镜像呢?