我有一个关于docker和postgres的问题。每次docker启动时我都要设置一个新的postgres数据库,并想导入给定的转储。
我的问题与此类似,但回答对我来说不够充分:Docker postgres does not run init file in docker-entrypoint-initdb.d
Docker-Compose:
postgres:
environment:
- POSTGRES_USER=****
- POSTGRES_PASSWORD=****
- POSTGRES_DB=****
build:
context: .
dockerfile: dockerfile-postgres
我的Dockerfile:(我已经尝试过用一个以.sh结尾的脚本)
FROM postgres
ADD dump.sql /docker-entrypoint-initdb.d/
根据 https://hub.docker.com/_/postgres/,必须使用dump.sql来导入数据库。
仅使用docker启动应用程序只会给出:
postgres_1 | LOG: invalid record length at 0/1708600
postgres_1 | LOG: redo is not required
postgres_1 | LOG: MultiXact member wraparound protections are now enabled
postgres_1 | LOG: database system is ready to accept connections
postgres_1 | LOG: autovacuum launcher started
除此之外,我测试了我的数据库是否已经被导入,但是我的数据库中没有表。我做错了什么(在目标系统上读取和执行文件没有问题)?使用psql导入它没有问题,所以我的转储文件是正确的。
希望你能帮助我,我提前感谢你。
ADD
只有在作为URL时才会运行魔法,就像Docker COPY vs ADD中所讨论的那样。你不想运行pr_restore
并将其路径指向你的dump.sql
副本吗?...但也许pg_restore
不能与容器化变体一起使用(正如Postgres Docker Hub页面上18天前的评论所建议的那样)。 - Dilettantinit.sql
而不是dump.sql
呢?这可能是一种魔法水平,可以在这样一个神奇的文件夹中导致执行。 - Dilettant