【发布时间】:2018-02-06 01:14:55
【问题描述】:
我想使用 Docker 将 .sql 文件加载到 PostgreSQL 数据库中并提供服务。
以下命令快速返回(在数据库完全填充之前 - 这似乎在后台异步发生)。
docker run \
--name myContainer \
-p 5432:5432 \
-v mySqlFile.sql:/docker-entrypoint-initdb.d/dump.sql \
-d postgres:alpine
由于此命令将成为脚本的一部分,因此我希望该命令在数据库使用 mySqlFile.sql 完全初始化之前一直阻塞
在加载mySqlFile.sql 时,我将如何阻止命令或其他一些暂停方式?
为清楚起见:我运行上述命令,然后运行以下命令:
echo "select count(*) as \"Posts imported\" from posts;" | docker exec -i myContainer psql -U postgres
Posts imported
----------------
0
(1 row)
等待几秒钟,我明白了:
echo "select count(*) as \"Posts imported\" from posts;" | docker exec -i myContainer psql -U postgres
Posts imported
----------------
51103
(1 row)
这是一个问题,因为我希望构建一个自动化的解决方案。我希望 docker run 命令阻塞,直到所有记录都导入 Postgres。然后我的数据库处于准备好下一个命令的状态。
【问题讨论】:
-
您的 docker 将在挂载完成后运行。然后PostgreSQL服务会自动阻塞,直到
/docker-entrypoint-initdb.d中的所有脚本都被执行完 -
如何运行 bash 脚本而不是 psql ... 在 sleep 中运行 15 秒然后执行 psql 命令?
-
感谢@Urban48,但我不想使用 sleep 语句,因为我无法预测 sql 转储的大小。 15 秒可能太长了(这还可以)......但它可能太短了(然后我的脚本会中断)
标签: postgresql docker