You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker PostgreSQL entrypoint-initdb.d指定初始化SQL执行数据库问题

问题原因

官方PostgreSQL Docker镜像的docker-entrypoint-initdb.d目录下的初始化脚本,默认会执行到POSTGRES_USER环境变量对应的同名数据库中,你当前配置里POSTGRES_USER=root,所以init.sql默认执行到了root库。

解决方案(二选一即可)


方案1:修改init.sql文件,显式指定执行数据库

在init.sql开头添加切换数据库的语句即可,修改后内容如下:

\c postgres;

CREATE TABLE accounts (
    user_id serial PRIMARY KEY,
    username VARCHAR ( 50 ) UNIQUE NOT NULL,
    password VARCHAR ( 50 ) NOT NULL,
    email VARCHAR ( 255 ) UNIQUE NOT NULL,
    created_on TIMESTAMP NOT NULL,
        last_login TIMESTAMP 
);

insert into accounts(username,password,email,created_on) values ('a','aaa','assdfdas',now());

方案2:修改docker-compose.yml配置,指定默认初始化数据库

在postgres服务的environment配置块中新增POSTGRES_DB=postgres参数,即可指定初始化脚本默认执行到postgres库,修改后的docker-compose.yml对应部分如下:

version: '3'

services:
  postgres:
    image: postgres:13.1
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
      timeout: 45s
      interval: 10s
      retries: 10
    restart: always
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=postgres # 新增这行配置
      - APP_DB_USER=docker
      - APP_DB_PASS=docker
      - APP_DB_NAME=docker
    volumes:
      - ./db:/docker-entrypoint-initdb.d/
    ports:
      - 5432:5432

注意事项

修改配置后需要先清空之前初始化生成的数据库卷,否则初始化脚本不会重复执行,执行以下命令即可:

docker-compose down -v

之后再重新执行docker-compose up即可生效。

内容的提问来源于stack exchange,提问作者Vulwsztyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:12:01