dag*_*da1 5 postgresql docker docker-compose
我有以下 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
Run Code Online (Sandbox Code Playgroud)
上面不起作用,因为 docker-compose 服务中没有 onrun。
我想做的就是创建一个数据库(如果它不存在),但这非常困难,因为我不知道服务何时启动。
在 postgres 中做到这一点也不容易。我尝试映射一个卷以便运行 initdb.sql:
volumes:
- postgres:/data/postgres
- ./initdb/1_schema.sql:/docker-entrypoint-initdb.d/1_schema.sql
Run Code Online (Sandbox Code Playgroud)
1_schema.sql 如下所示:
SELECT datname
FROM pg_database
WHERE datname='premiership'';
IF datname='
premiership'
THEN CREATE DATABASE premiership PASSWORD 'test';
END IF;
Run Code Online (Sandbox Code Playgroud)
数据库未创建,当我运行时,docker-compose logs我看不到任何有关运行脚本的信息。
小智 14
您是否尝试过POSTGRES_DB在您的环境中设置变量docker-compose.yml?
image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: premiership
PGDATA: /data/postgres
volumes:
Run Code Online (Sandbox Code Playgroud)
请参阅https://hub.docker.com/_/postgres:
POSTGRES_DB此可选环境变量可用于为首次启动映像时创建的默认数据库定义不同的名称。如果未指定,则将
POSTGRES_USER使用 的值。
| 归档时间: |
|
| 查看次数: |
12703 次 |
| 最近记录: |