我有一个关于停止数据库容器的问题。
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
并将目录/ var / lib / pgdata创build为容器卷
我停止与容器:
sudodocker停止分贝
数据库会优雅地停止吗?
我会有损坏的数据吗?
无论数据库是否“优雅”停止,您都不会有损坏的数据。 除非您另行configurationPostgreSQL,否则只要基础文件系统和磁盘存储器尊重磁盘刷新请求(fsync),PostgreSQL就是安全的。 你失去正在进行的交易,但没有任何损坏或遗留下来的一半。 即使你使用SIGKILL ( kill -9 )服务器也是如此, 尽pipe这样做并不是一个好的做法 。
你将遇到的主要问题是,如果PostgreSQL服务器突然closures,下次启动可能需要更长的时间,因为它需要做更多的工作来恢复已提交但尚未完全应用的工作。 (简单化)。
如果容器中没有运行init (sysvinit / systemd / upstart),那么很可能不会执行正常closures,除非您明确地给docker某种closures脚本。 (我还没有与docker工作)。 一些快速search表明它只是向容器中的进程发送一个SIGTERM 。 这对PostgreSQL来说很好,而且实际上是pg_ctl -m smart所做的 。 可能需要一段时间才能停止,因此您可以select使用SIGINT来强制事务中止并更快地closures。