将Docker容器还原回其原始映像而不重新启动它?

yzxexxkh  于 2023-03-17  发布在  Docker
关注(0)|答案(5)|浏览(191)

通常情况下,人们都想让Docker在他们的容器中持久化数据,关于如何做到这一点,有大约2000万个问题,但我是一个测试人员,我想转储我刚刚对数据做的所有垃圾,并恢复到我已知的状态(又名我的图像)。
我知道我可以通过基于我的映像创建一个新容器来实现这一点,但这会迫使我断开并重新连接到我的容器的任何网络连接,这是一个巨大的痛苦。
是否可以将正在运行的container恢复到其原始映像而无需重新启动它?

ffdz8vbo

ffdz8vbo1#

遗憾的是,当它运行时,您将无法恢复或更改映像。您需要停止正在运行的容器并删除它们。一旦您的卷不再连接到任何容器,运行命令docker volume prune将销毁当前未连接到容器的所有卷。
然后,您可以简单地从图像中重新启动您的Docker容器,您将有一个全新的开始。
我还发现这篇文章是我学习Docker时的一个很好的参考:https://web.archive.org/web/20190528002402/https://medium.com/the-code-review/top-10-docker-commands-you-cant-live-without-54fb6377f481

nzk0hqpo

nzk0hqpo2#

要恢复到原始状态,您必须重新启动容器-这一点很重要,因为容器映像只是一堆文件,实际运行的容器必须启动某个进程,因此,您不能在运行时恢复容器,因为该进程很可能会出现问题。
因此,为了回答您的问题--重新启动容器,Docker映像只需要几毫秒的时间就可以启动--其余的时间就是进程的启动。

kmynzznz

kmynzznz3#

不要挂载卷到容器。卷,无论是数据或文件系统挂载是持久的。如果你不持久的数据,你可以去docker重新启动我的容器。

vecaoik1

vecaoik14#

我在一个Windows环境中。下面显示的脚本对我很有效。基本上你删除了容器(这是可以的,因为当调用Docker up时,它很容易从映像中重建),然后删除了现在的孤立卷。
这将删除Docker中运行的所有容器,因为我只运行一个应用程序。如果您运行多个应用程序,您可能需要修改您的解决方案。
我不知道如何按名称删除顶级应用程序。
(将“myapp”替换为应用程序的名称)

@echo off
echo.
echo.
echo Deleting Containers...
FOR /f "tokens=*" %%i IN ('docker ps -aq') DO docker rm %%i
echo.
echo Pruning orphaned volumes
docker volume prune -f
echo.
echo Starting myapp...
docker-compose -p myapp -f ../tools/docker-compose.yml up --remove-orphans
echo.
echo.
echo Done.
echo.
echo.
8qgya5xd

8qgya5xd5#

根据我的经验,最快的重置环境的方法包括把容器取下来,但这真的没有那么痛苦。
Docker-compose可以帮助您:

docker-compose down
docker-compose up -d

就是这样。

相关问题