gpt4 book ai didi

postgresql - 如果在 docker-compose 启动时不存在,则创建 postgres 数据库

转载 作者:行者123 更新时间:2023-11-29 12:50:09 24 4
gpt4 key购买 nike

我有以下 docker-compose 文件:

version: '3.5'

services:
postgres:
container_name: postgres_container
image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
PGDATA: /data/postgres
volumes:
- postgres:/data/postgres
onrun:
psql -h=localhost -P=${POSTGRES_PASSWORD} -U=${POSTGRES_USER} -tc "SELECT 1 FROM pg_database WHERE datname = 'premiership'" | grep -q 1 || psql -h=localhost -P=${POSTGRES_PASSWORD}-U=${POSTGRES_USER}c "CREATE DATABASE premiership"
ports:
- "5432:5432"
networks:
- postgres
restart: unless-stopped

上述方法不起作用,因为 docker-compose 服务中没有 onrun。

我想做的就是创建一个数据库(如果它不存在),但这非常困难,因为我不知道服务何时启动。

在 postgres 中也不容易做到这一点。我尝试映射一个卷以便运行 initdb.sql:

volumes:
- postgres:/data/postgres
- ./initdb/1_schema.sql:/docker-entrypoint-initdb.d/1_schema.sql

1_schema.sql 看起来像这样:

SELECT datname
FROM pg_database
WHERE datname='premiership'';
IF datname='
premiership'
THEN CREATE DATABASE premiership PASSWORD 'test';
END IF;

数据库未创建,当我运行 docker-compose logs 时,我没有看到有关运行脚本的任何信息。

最佳答案

您是否尝试过在您的 docker-compose.yml 环境中设置 POSTGRES_DB 变量?

 image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: premiership
PGDATA: /data/postgres
volumes:

参见 https://hub.docker.com/_/postgres :

POSTGRES_DB

This optional environment variable can be used to define a different name for the default database that is created when the image is first started. If it is not specified, then the value of POSTGRES_USER will be used.

关于postgresql - 如果在 docker-compose 启动时不存在,则创建 postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56216465/

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