我喜欢使用Jupyter Notebook。如果我在虚拟机中的VM中运行它,我可以保存VM的状态,然后在第二天离开的地方继续。如果我在Docker容器中运行它,我可以做类似的事情吗?即将容器的“状态”转储到磁盘上,然后将其重新启动并重新加载“状态”?
答案 0 :(得分:4)
看起来docker checkpoint
可能是我试图在这里完成的事情。在描述它的文档中并没有多少。事实上,docker checkpoint
的文档说"管理检查点"这是非常无益的。
更新:事实上,这就是docker checkpoint应该完成的任务。当我检查我的jupyter笔记本容器时,它保存它,我可以用docker start --checkpoint [my_checkpoint] jupyter_notebook
启动它,它显示我运行的状态为Running
状态。但是,尝试使用Running
笔记本失败。我不确定这是CRIU问题还是Jupyter问题,但我会在相应的git问题跟踪器中提出它。
Anyhoo docker checkpoint
是应该提供VM-save-state / hibernate样式功能的东西。
答案 1 :(得分:3)
我能看到的最接近的方法是docker pause <container-id>
https://docs.docker.com/engine/reference/commandline/pause/
docker pause命令挂起指定容器中的所有进程。在Linux上,它使用cgroups冷冻器。传统上,当暂停进程时,使用SIGSTOP信号,该进程被暂停可观察到。使用cgroups冷冻程序时,该过程不知道,无法捕获,它被暂停,随后恢复。
考虑到与VirtualBox休眠的重要区别,即容器化进程的内存状态没有磁盘持久性。
答案 2 :(得分:-1)
如果您只是停止容器,它会休眠:
docker stop myjupyter
(hours pass)
docker start myjupyter
docker attach myjupyter
我一直这样做,特别是对于包含网页浏览器的docker容器。