docker 如何使用纯停靠器合成将PostGIS添加到PostgreSQL设置中

t30tvxxf  于 2023-02-15  发布在  Docker
关注(0)|答案(2)|浏览(119)

我们一直在使用以下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都是新手,所以请原谅我对这两个东西的无知。

gdx19jrr

gdx19jrr1#

为什么不使用Dockerfile specfic来添加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"

然后创建一个名为Dockerfile-db的文本文件,路径与docker-compose.yml相同,内容如下:

FROM postgres:14.1

RUN apt-get update && apt-get  install -y postgresql-14-postgis-3  

CMD ["/usr/local/bin/docker-entrypoint.sh","postgres"]

请注意,您可以指定PostGIS版本以及Postgresql版本。
这样,您就可以通过扩展Dockerfile-db在容器中安装所需的所有内容
注意:你的数据库容器现在有PostGIS,但是我们需要在数据库中创建扩展,为此你应该运行CREATE EXTENSION postgis;,如果你使用卷,你只需要做一次。
额外好处:一种方法是准备一个名为db/的目录,其中包含init.sql文件,然后编写类似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将运行此脚本并创建扩展

f87krz0w

f87krz0w2#

https://hub.docker.com/r/postgis/postgis
为什么不在上面的链接中使用基于PostgreSQL官方图片的PostGIS图片?

相关问题