停止 postgresql 容器

And*_*cía 2 postgresql docker

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

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

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被创建为容器卷

  • 我停止容器:

须藤泊坞窗停止数据库

数据库会正常停止吗?

我会有损坏的数据吗?

Cra*_*ger 5

无论数据库是否“正常”停止,您都不会拥有损坏的数据。PostgreSQL 是崩溃安全的,除非你另外配置它​​,只要底层文件系统和磁盘存储尊重磁盘刷新请求 (fsync)。您丢失了正在进行的交易,但没有任何内容被损坏或未完成。即使您是SIGKILL( kill -9) 服务器也是如此,尽管定期这样做并不是一个好主意

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

如果init容器 (sysvinit/systemd/upstart) 中没有运行,那么很可能不会执行正常关闭,除非您已经明确地为 docker 提供了某种关闭脚本。(我还没有和 docker 一起工作过)。一些快速搜索表明它只是将 a 发送SIGTERM到容器中的进程。这是PostgreSQL的罚款,其实是什么pg_ctl -m smart。停止可能需要一段时间,因此您可以选择使用SIGINT强制事务中止并更快地关闭。

  • `SIGTERM` 只会在所有现有连接终止后才会导致服务器关闭。所以如果你有打开的连接,`docker stop` 不一定会给你一个优雅的关闭,因为它会等待 10 秒然后发送 `SIGKILL`。 (3认同)