我正在使用带有repmgr的Postgres,我遇到的一个小问题是有时repmgr必须停止并启动Postgres服务,这只会杀死容器,我在Dokcerfile中尝试了一些在线解决方案,但似乎没有工作,我可以在 docker-compose 文件中添加一些东西来防止 docker 立即退出,我不想永远活着,但也许几分钟?
问问题
497 次
2 回答
0
请记住,docker-composer 主要是开发的东西。对于生产,还有其他方法,例如 Kubernetes。
我知道的唯一解决方案是将我们自己的 .sh 脚本作为主进程运行,这将有无限循环并在其中进行必要的检查。
通过这种方式,您可以控制如何检查 - 喜欢ps aux
和 grep 您需要的内容。并在需要时通过执行逻辑退出主进程。
sh 脚本看起来像:
while sleep 180; do
ps aux |grep postgres_service_name |grep -v grep
POSTGRESS=$?
if [ $POSTGRESS -ne 0 ]; then
# do what you need before exiting whole container
exit 1
fi
done
确保postgres_service_name
用 Linux 上 Postgres 服务的真实名称替换。
将该脚本用作 docker compose 中的启动脚本或您将在 prod 中使用的任何内容。
如果您真的需要 2 分钟才能关闭 - 我将实施逻辑,在第一次处理不存在后测量时间
于 2020-11-20T20:32:01.367 回答
0
设计的方式docker
将通过启动指定为入口点/命令的命令来启动一个新容器,并且当该进程终止时docker
将杀死该容器中的所有剩余进程并将其关闭。
因此,要在 Postgres 进程重新启动时保持容器运行,您需要让另一个命令作为容器中的根进程运行。
您可以通过编写一个简单的 shell 脚本作为包装器来实现这一点,该包装器只会在不再运行 Postgres 进程时退出,或者使用专用的 init 工具,例如supervisord
.
于 2020-11-20T23:13:49.160 回答