停止postgresql容器

我有一个关于停止数据库容器的问题。

  • 我有一个运行postgresql的docker镜像 。 当我用这个图像创build一个容器时:

sudo docker run –name db -d asg1612 / postgresql

  • 它运行命令:

/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file = / etc / postgresql / 9.3 / main / postgresql.conf

sudodocker停止分贝

数据库会优雅地停止吗?

我会有损坏的数据吗?

无论数据库是否“优雅”停止,您都不会有损坏的数据。 除非您另行configurationPostgreSQL,否则只要基础文件系统和磁盘存储器尊重磁盘刷新请求(fsync),PostgreSQL就是安全的。 你失去正在进行的交易,但没有任何损坏或遗留下来的一半。 即使你使用SIGKILLkill -9 )服务器也是如此, 尽pipe这样做并不是一个好的做法 。

你将遇到的主要问题是,如果PostgreSQL服务器突然closures,下次启动可能需要更长的时间,因为它需要做更多的工作来恢复已提交但尚未完全应用的工作。 (简单化)。

如果容器中没有运行init (sysvinit / systemd / upstart),那么很可能不会执行正常closures,除非您明确地给docker某种closures脚本。 (我还没有与docker工作)。 一些快速search表明它只是向容器中的进程发送一个SIGTERM 。 这对Po​​stgreSQL来说很好,而且实际上是pg_ctl -m smart所做的 。 可能需要一段时间才能停止,因此您可以select使用SIGINT来强制事务中止并更快地closures。