Jot*_*ain 4 postgresql docker docker-compose
我想在 postgres 容器启动后在 docker-compose.yml 文件中创建一个名为 Bank 的 postgres 数据库,但是当我运行时docker-compose --env-file .env -f docker-compose.yaml up -d
出现此错误:/var/run/postgresql:5432 - no response
...
当我删除带有选项的行时command:
,一切都会正常启动,我得到:/var/run/postgresql:5432 - accepting connections
但现在,我必须在终端中逐步运行此操作:
我真的不希望它像那样工作,相反,我希望在 docker-compose 文件中创建数据库。(请注意,当我删除该command:
选项并until pg_isready; do sleep 1; done; echo accepting;
在容器内运行时,它accepting
几乎立即输出)
envPOSTGRES_DB
变量不起作用,用户名仍用作默认值
这是我的 docker-compose 文件:
services:
db:
container_name: postgres
image: postgres
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- PGDATA=/data/postgres
volumes:
- db:/data/postgres
ports:
- "5332:5432"
networks:
- db
restart: unless-stopped
healthcheck:
test: [ "CMD-SHELL", "pg_isready -d postgres" ]
interval: 30s
timeout: 10s
retries: 5
command: /bin/bash -c "until pg_isready -U ${POSTGRES_USER} -p 5432; do sleep 1; done; psql -U ${POSTGRES_USER} -c 'CREATE DATABASE bank;'"
networks:
db:
driver: bridge
volumes:
db:
Run Code Online (Sandbox Code Playgroud)
最重要的一行是命令::
command: /bin/bash -c "until pg_isready -U ${POSTGRES_USER} -p 5432; do sleep 1; done; psql -U ${POSTGRES_USER} -c 'CREATE DATABASE bank;'"
Run Code Online (Sandbox Code Playgroud)
请帮助我执行正确的命令,以便运行时自动创建数据库docker-compose --env-file .env -f file up -d
您是否考虑过使用POSTGRES_DB
环境变量?
services:
db:
container_name: postgres
image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /data/postgres
POSTGRES_DB: bank
volumes:
- db:/data/postgres
ports:
- "5332:5432"
networks:
- db
restart: unless-stopped
healthcheck:
test: [ "CMD-SHELL", "pg_isready -d postgres" ]
interval: 30s
timeout: 10s
retries: 5
networks:
db:
driver: bridge
volumes:
db:
Run Code Online (Sandbox Code Playgroud)
您可以使用创建数据库脚本并将其添加为卷,如下所示:
version: '3'
services:
db:
image: postgres:15.3-alpine3.18
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- '5432:5432'
volumes:
- ./db:/var/lib/postgresql/data
- ./create-db.sql:/docker-entrypoint-initdb.d/create_database.sql
networks:
- backnet
Run Code Online (Sandbox Code Playgroud)
我的 SQL 脚本很简单,如下所示:
CREATE DATABASE some_database;
Run Code Online (Sandbox Code Playgroud)
如果您已经将卷初始化为“db”,则需要先将其删除(据我所知),因为 postgres 会声明数据库已存在并将跳过初始化。
归档时间: |
|
查看次数: |
8908 次 |
最近记录: |