Postgres Docker 容器不 运行 创建 SQL 脚本

Postgres Docker container does not run create SQL script

docker-compose.yml

version: '3'
services:
  db:
    image: "postgres"
    build: .
    ports:
      - "5432:5432"
    env_file:
      - database.env

Dockerfile

FROM postgres:9.3
ADD CreateDB.sql /docker-entrypoint-initdb.d/

CreateDB.sql

CREATE TABLE data_actions (
    username VARCHAR NOT NULL,
    json_payload VARCHAR NOT NULL,
    cache_id VARCHAR,
    action_timestamp TIMESTAMP
)

database.env

DOCKER_USER=docker
DOCKER_DB=docker
DOCKER_PASSWORD=docker

这些是我用来创建此容器的文件。我已验证 CreateDB.sql 脚本已复制到容器中并且位于正确的位置。当我构建并 运行 容器并检查 pgAdmin 时,docker 数据库中没有表。我觉得我在这里遗漏了一些明显的东西?

更新 这是启动日志 ->

LOG:  database system was interrupted; last known up at 2020-12-23 18:21:18 UTC
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/17A7030
LOG:  redo is not required
LOG:  MultiXact member wraparound protections are now enabled
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections
LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down

问题是您错误地命名了环境变​​量。 postgres image 期望环境名称以 POSTGRES_ 开头(因此,POSTGRES_DBPOSTGRES_USER 等)。

database.env 中重命名后,我有:

POSTGRES_USER=docker
POSTGRES_DB=docker
POSTGRES_PASSWORD=docker

我可以启动您的撰写堆栈,然后:

$ docker-compose exec db psql -U docker
psql (9.3.25)
Type "help" for help.

docker=# \c docker
You are now connected to database "docker" as user "docker".
docker=# \dt
           List of relations
 Schema |     Name     | Type  | Owner
--------+--------------+-------+--------
 public | data_actions | table | docker
(1 row)

docker=#

使用您的原始 database.env,Postgres 会在默认 postgres 数据库中创建您的 data_actions table。