【问题标题】:Docker-Compose and Postgres ExtensionsDocker-Compose 和 Postgres 扩展
【发布时间】:2019-04-18 08:11:26
【问题描述】:

这是我的 docker-compose 文件。有没有简单的方法来安装 postgres 扩展?我正在尝试安装pg_trgm

编辑:我现在有两个 dockerfile 和一个安装脚本。当我运行docker-compose up build时,它似乎不起作用@

Internal server error: pq: operator does not exist: character varying % unknown

services:
  db:
    build:
      context: .
      dockerfile: db/Dockerfile
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=x
      - POSTGRES_PASSWORD=x
      - POSTGRES_DB=x

  api:
    build:
      context: .
      args:
        app_env: ${APP_ENV}
    volumes:
      - .:/go/src/x/y/z
    ports:
      - "8080:8080"

db/Dockerfile:

FROM postgres
COPY db/install-extensions.sql /docker-entrypoint-initdb.d

db/install-extensions.sql

CREATE EXTENSION IF NOT EXISTS pg_trgm;

【问题讨论】:

  • 有一个在提到的 Dockerfile 中添加扩展的例子here:Github
  • 您需要编写自己的 Dockerfile,它只是从“postgres”扩展而来并安装扩展。然后在 docker-compose 中构建该 dockerfile
  • @Mihai 做了一个编辑,如果你可以看一下。
  • 把sql文件和Dockerfile放在同级。然后在 docker 文件中删除“db/”。您也可以删除 docker-compose 中的“上下文”声明。
  • 确实,如果要初始化数据库,您必须始终删除数据量

标签: postgresql docker docker-compose


【解决方案1】:

试试这个

FROM postgres
COPY ./install-extensions.sql /docker-entrypoint-initdb.d

并从您的文件中删除 db。

或者你可以写

version: "3.1"

services:
  db:
    image: postgres:9.6
    restart: always
    environment:
      POSTGRES_PASSWORD: unit
      POSTGRES_USER: unit
      POSTGRES_DB: unit
    ports:
      - 5432:5432
    volumes:
      - ./scripts:/docker-entrypoint-initdb.d

然后

  1. 创建目录脚本
  2. 放入您的 .sql 或 .sh 文件
  3. 删除创建的容器 docker-compose rm -v
  4. 启动 docker docker-compose up --build
  5. 在日志中,您必须看到如下内容:

created_extension

【讨论】: