如何使用纯 docker-compose 将 PostGIS 添加到我的 PostgreSQL 设置中

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

我们一直在使用以下

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 都很陌生,所以请原谅我对此的无知。

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

为什么不使用特定的 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 将运行这个脚本并创建你的扩展


7
投票

https://hub.docker.com/r/postgis/postgis

为什么不使用上面链接中基于官方 PostgreSQL 镜像的 PostGIS 镜像呢?

© www.soinside.com 2019 - 2024. All rights reserved.