我正在寻找构建表示已经存在的公司数据库的dockerfile。同样,我想创建一个从还原psql转储开始的docker文件。
我psql_dump.sql在.目录中。
psql_dump.sql
.
FROM postgres ADD . /init_data run "createdb" "--template=template0" "my_database" run "psql" "-d" "my_database" --command="create role my_admin superuser" run "psql" "my_database" "<" "init_data/psql_dump.sql"
我认为这样做就足够了。我想避免使用.sh脚本的解决方案。
.sh
我使用template0,因为psql文档说您需要与原始数据库中创建的用户相同,并且需要在还原之前使用template0创建数据库。
但是,这给了我一个错误:
createdb: could not connect to database template1: could not connect to server: No such file or directory Is the server running locally and accepting
我还在整个应用程序中使用docker compose,如果在docker- compose中解决此问题更好,那么我很乐意使用基本的psql映像并使用docker compose做到这一点。
根据官方PostreSQL Docker映像的使用指南,您需要做的是:
FROM postgres ENV POSTGRES_DB my_database COPY psql_dump.sql /docker-entrypoint-initdb.d/
该POSTGRES_DB环境变量将指示容器中创建一个my_database在首次运行模式。
POSTGRES_DB
my_database
并且将执行在容器中.sql找到的任何文件/docker-entrypoint-initdb.d/。
.sql
/docker-entrypoint-initdb.d/
如果要执行.sh脚本,也可以在/docker-entrypoint-initdb.d/目录中提供它们。