gpt4 book ai didi

postgresql - docker-compose 中的 PostgresDB 初始化

转载 作者:行者123 更新时间:2023-12-02 18:03:32 30 4
gpt4 key购买 nike

我想在启动 Docker 环境时初始化我的 PostgresDb。

docker-compose.yml :

version: '3.1'
services:
app:
container_name: springboot-postgresql
image: sringboot-postgresql
build:
context: .
dockerfile: ./java/Dockerfile
ports:
- "8080:8080"
depends_on:
- posgresqldb

posgresqldb:
image: postgres
build:
context: .
dockerfile: ./pg/Dockerfile
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
- POSTGRES_DB=postgres
volumes:
- ./postgres-data:/var/lib/postgresql/data
- ./pg/init.sql:/docker-entrypoint-initdb.d/init.sql

docker 文件:

FROM postgres:12-alpine
COPY pg/init.sql /docker-entrypoint-initdb.d/

初始化.sql:

CREATE USER docker;

CREATE DATABASE postgres;

CREATE TABLE public.usr (
id varchar NOT NULL,
username varchar NOT NULL,
"password" varchar NOT NULL,
active bool NULL,
email varchar NULL,
authorities varchar NULL,
accountnonexpired bool NULL,
accountnonlocked bool NULL,
credentialsnonexpired bool NULL,
enabled bool NULL,
CONSTRAINT id_pkey PRIMARY KEY (id)
);

GRANT ALL PRIVILEGES ON DATABASE postgres TO docker;

INSERT INTO public.usr
(id, username, "password", active, email, authorities, accountnonexpired, accountnonlocked, credentialsnonexpired, enabled)
VALUES('1', 'User_1', '*****', false, '', '', false, false, false, false);

init.db 挂载成功并且 Docker 容器创建成功,但我在数据库中没有任何变化。

enter image description here

你能告诉我我还应该做什么吗?我是否需要任何其他命令来初始化 init.sql?

谢谢。

最佳答案

您不需要复制 Dockerfile 中的 init.sql,因为您已经将其安装在 docker-compose.yml 中

如果数据库尚未初始化,容器只会检查 docker-entrypoint-initdb.d。这意味着要运行的初始化脚本的数据文件夹应该是空的。

在您的情况下,请确保在运行 docker-compose up 之前主机目录 ./postgres-data 为空。只要此文件夹中存在数据,postgres 就会使用它,而不会再次尝试初始化数据库。

关于postgresql - docker-compose 中的 PostgresDB 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62550427/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com