node.js - 当 docker 容器崩溃时数据会发生什么

标签 node.js mongodb redis docker

我们正尝试转向 Docker 进行部署。我们的架构需要有一个 redis、一个 mongodb 和几个基于 nodejs 和 java 的 Docker 容器。

所以我的问题是,如果假设 redis/mongodb docker 容器崩溃,我们是否会丢失它拥有的所有数据?

我们想要隔离,但同时我们不希望由于故障/崩溃而丢失数据。这甚至有可能通过 Docker 实现吗?还是这里不相关?

如有任何帮助或意见,我们将不胜感激。

谢谢

最佳答案

答案是:是的——如果容器崩溃以至于无法恢复/重启,数据就会消失。但是,通常容器可以重新启动并继续 - 在这种情况下数据不会丢失。

例如- docker 文档中的以下序列说明了容器启动的工作方式。请注意,在容器被移除之前,数据不会丢失。

# Start a new container
$ JOB=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")

# Stop the container
$ sudo docker stop $JOB

# Start the container
$ sudo docker start $JOB

# Restart the container
$ sudo docker restart $JOB

# SIGKILL a container
$ sudo docker kill $JOB

# Remove a container
$ sudo docker stop $JOB # Container must be stopped to remove it
$ sudo docker rm $JOB

每当您执行 docker run 命令时,您都会启动一个包含新数据的新容器。数据基于您提供的图像并且该数据是一致的(当然除非您重建图像)。

那么,您应该如何设置 docker 以保持您的数据完整无缺?我认为一个好的方法是将重要数据保存在 volume 中。卷只是保存数据的外部文件夹(即来自主机系统的文件夹),即使您重新安装整个 docker 守护进程,这些数据也不会丢失。

例子:

docker run -v /some/local/dir:/some/dir/in/redis-container my/redis

这会将主机文件夹 /some/local/dir 挂载为正在运行的容器中的文件夹 /some/dir/in/redis-container。如果例如redis 将其数据存储在您准备好去的那个文件夹中,并且可以在重启/崩溃时幸存下来。

有关 docker 卷的更多信息,请查看 docs .另一篇很棒的文章也来自 docker 网站,Managing Data in Containers .

编辑:评论后我澄清了答案 - 如果容器无法重新启动(完全崩溃),数据将丢失。

关于node.js - 当 docker 容器崩溃时数据会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701263/

相关文章:

javascript - 如何找到最常用的JS文件?

data-structures - 如何在Redis中表示此结构

node.js - 在 AWS Lambda 中重试

node.js - MongoDb 查询匹配并删除数组中的元素?

regex - ExpressJS 路由正则表达式 : how to match a param to everything except one route

C# Interactive - 无法加载文件或程序集

linux - 不小心删除了mongodb文件

node.js - 分配给 Mongoose 枚举的 typescript 枚举?

redis - Redisson中各种锁的实现提供了哪些保证?

java - 可以为加载类定义新字段