停止 postgresql 容器

停止 postgresql 容器

我对停止数据库容器有疑问。

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

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是创建为容器容积

  • 我使用以下命令停止容器:

sudo docker 停止数据库

数据库是否会正常停止?

我的数据是否会被损坏?

答案1

无论数据库是否“正常”停止,您都不会损坏数据。除非您另行配置,否则只要底层文件系统和磁盘存储遵守磁盘刷新请求 (fsync),PostgreSQL 就是崩溃安全的。您会丢失正在进行的事务,但不会损坏任何事务或留下半途而废的事务。即使您SIGKILL( kill -9) 服务器,情况也是如此,但这并不是一个好主意

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

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

相关内容