首页 > 解决方案 > docker-compose.yml,postgress,如何在 init.sql 文件中设置 db、tables 和 prepop?

问题描述

我想添加一个数据库、表并使用某种 init.sql 文件进行预填充。不确定 init.sql 文件是什么样的。也不确定我会将 ADD 命令放在哪里。

这个 docker-compose.yml 文件有效

version: '3.6'
services:
  postgre:
    image: postgres:11.1-alpine
    ports:
      - "5432"
    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

标签: postgresqldocker-compose

解决方案


您可以将*.sh脚本和/或*.sql指令添加到/docker-entrypoint-initdb.d/目录(基本上是您在docker-compose.yml文件中的内容)。

创建用户的 shell 脚本示例:

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL

您可以.sql通过“转储”数据从现有数据库生成文件psql -U <username> -d <dbname> -1 -f <filename>.sql。然后,您可以将.sql文件添加到您的./init/目录。

这记录在https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image


推荐阅读