首页 > 解决方案 > docker-entrypoint-initdb 中的 .sql 文件未运行

问题描述

我正在使用 docker-compose 3.7 运行 Postgresql,但我无法让我的 init.sql 通过 docker-entrypoint-initdb.d 入口点运行。

我知道我机器上的卷目录需要为空,但我确信我这样做是正确的。我一定错过了一些相当简单/明显的东西。

version: '3.7'

services:

  postgresdb:
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: appdb 
      POSTGRES_PASSWORD: ########
    image: bitnami/postgresql:latest
    ports:
      - "5432:5432"
    volumes:
    - ./db/postgres_volume:/bitnami:rw
    - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
    restart: always
CREATE TABLE user (
        id SERIAL NOT NULL PRIMARY KEY,
        name VARCHAR(255) NOT NULL
);

我的卷目录是空的。

$ ls db/postgres_volume/
$ 

容器启动时没有问题,但从日志中,我无法判断 init.sql 脚本是否已执行。脚本似乎已加载,但我不确定执行。

$ docker-compose -f docker-compose.yml up -d postgresdb 
Creating network "app_default" with the default driver
Creating app_postgresdb_1 ... done
$
postgresdb_1  | INFO  ==> Loading custom scripts...
postgresdb_1  | INFO  ==> Loading user's custom files from /docker-entrypoint-initdb.d ...
postgresdb_1  | INFO  ==> Starting PostgreSQL in background...

登录到容器,然后登录到我的数据库,我看不到任何表。

$ docker exec -it 737845344cf2 bash
I have no name!@737845344cf2:/$ psql -U appdb appdb
appdb=> \dt
Did not find any relations.

创建容器后,我看到一个“postgresql”文件夹 db/postgres_volume 但没有内容。

$ ls db/postgres_volume/
postgresql

$ ls db/postgres_volume/postgresql/
$

标签: postgresqldockerdocker-compose

解决方案


首先,它永远不会创建表,因为您在创建表时使用了保留字 user。将用户更改为"user"

CREATE TABLE "user"(
   user_id serial PRIMARY KEY,
   username VARCHAR (50) UNIQUE NOT NULL
)

第二件事,上面的内容在初始化数据库时可以正常工作,但在最新的图像中存在安装问题,这可能是安装目录看起来为空的原因。

同样在文档中,路径是-v /path/to/postgresql-persistence:/bitnami/postgresql Persisting your database

在此处输入图像描述


推荐阅读