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_DB
、POSTGRES_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。
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_DB
、POSTGRES_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。