Docker-在初始化时在postgres中合成和创建数据库 [英] docker-compose and create db in Postgres on init

查看:12
本文介绍了Docker-在初始化时在postgres中合成和创建数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题。我对docker还是个新手,所以我要做的是创建一个docker-compose文件,该文件在compose命令上也会创建数据库。问题是,这并不能像我所要求的那样创建数据库。因此,我的对接构图如下所示:

version: '3'

services:
  db:
    image: postgres:latest
    restart: always
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: 'postgres'
    volumes:
      - database_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

volumes:
  database_data:
    driver: local

当我在日志中启动docker-compose up时,我可以看到

db_1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1  |
db_1  | 2020-01-13 11:14:36.259 UTC [1] LOG:  starting PostgreSQL 12.1 (Debian 12.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1  | 2020-01-13 11:14:36.259 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1  | 2020-01-13 11:14:36.260 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1  | 2020-01-13 11:14:36.264 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1  | 2020-01-13 11:14:36.277 UTC [29] LOG:  database system was shut down at 2020-01-13 11:10:57 UTC
db_1  | 2020-01-13 11:14:36.280 UTC [1] LOG:  database system is ready to accept connections

在我的init SQL中只有一行:

CREATE DATABASE "MyDataBase";

因为我列出的数据库是postgres容器,所以我的数据库找不到。此问题的根源可能是什么?

推荐答案

根据documentation of postgres docker image您做的一切都是正确的。

如果要在派生的映像中执行其他初始化 从该脚本开始,在以下位置添加一个或多个*.sql、*.sql.gz或*.sh脚本 /docker-入口点-initdb.d(如有必要,创建目录)。 在入口点调用initdb创建默认postgres用户之后 和数据库,它将运行任何*.sql文件,运行任何可执行文件*.sh 脚本,并将其中找到的任何不可执行的*.sh脚本 在启动服务之前执行进一步初始化的目录。

但是,根据您在上面发布的日志,我认为您遗漏了一个问题。

警告:/docker-entry point-initdb.d中的脚本仅在以下情况下运行 使用空的数据目录启动容器;任何 容器启动时,原有数据库将保持不变。

因此,我会尝试清空database_data目录并再次运行docker-compose up

这篇关于Docker-在初始化时在postgres中合成和创建数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆