Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有快速的方法来重置docker容器中的更改?_Docker - Fatal编程技术网

有没有快速的方法来重置docker容器中的更改?

有没有快速的方法来重置docker容器中的更改?,docker,Docker,我可以使用docker diff检查对容器文件系统上的文件或目录的更改,如下所示: $ docker diff inventory_web C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/uwsgi_temp A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx

我可以使用
docker diff
检查对容器文件系统上的文件或目录的更改,如下所示:

$ docker diff inventory_web
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /run
A /run/nginx.pid
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
但是我想知道是否有什么快速方法可以用来将
/etc/nginx/conf.d/default.conf
重置为该容器使用的图像的默认内容

类似于git中的操作:
git checkout--default.conf
,我们可以使用类似于
docker reset
docker checkout
等的操作吗


目前,我必须基于相同的图像启动一个新容器,并将该容器中的文件复制到我的旧容器中。但我认为docker overlay文件系统肯定知道与图像中的
ro
层相比,
rw
层发生了什么变化,因为它是基于层的,否则,
docker diff
如何工作?

docker不是SCM,但您可以使用某种黑客技术从基本图像复制文件

docker cp$(docker create--rm):/etc/nginx/conf.d/default.conf default.conf
docker cp default.conf:/etc/nginx/conf.d/default.conf

有趣的问题!您可以通过
docker cp
在启动时将文件从正在运行的容器中取出,然后在需要重置时返回来手动执行此操作。但是您是对的,引擎应该能够通过简单地丢弃该文件的r/w层信息来为您做到这一点。我不确定这是否作为API调用实际存在。我认为简短的回答是这是不可能的,因为这不是
docker
的使用方式:如果你想“重置”一个容器,你应该删除它并从图像中启动一个新的容器;如果要保留以前运行的持久数据,应使用卷。所以,也许你可以添加更多的上下文,说明你为什么要这样做,以及你想要实现什么。也许有更好的方法来解决这个问题。@acran事实上,生产时不需要这个。我的场景是:我正在做一个第三方项目,代码在容器中。有时我会将代码更改为试用版,如果确定将发送PR。如果不确定,我想重置更改和试用其他解决方案,当然我可以使用cp xxx xxx.bak备份旧文件,但有时我忘记了这一点。是的,您的意思可能是我们需要更改git下的代码,然后将更改发送到临时容器服务器进行测试。我知道这个过程,但我不是项目的维护者,我只是想做一些改变,不想在这里有一个完整的基础设施来保证我的过程…@acran无论如何,我在这里关心的是一些快速任务,在开发阶段直接在容器中处理事情,而不是最终的生产阶段。事实上,我没有看到在最终生产容器中使用
docker-cp
,我们根本不需要
docker-cp
。从docker原则来看,所有东西都应该在图像中或使用绑定挂载。为什么需要
docker cp?
,但它存在于此,这是为了便于开发,我想…谢谢,这实际上是我目前所做的,但我想知道我是否错过了一些简单的用法…这会起作用,但我想OP是在问docker引擎是否可以在本地为您做到这一点。我认为从概念上讲这应该是可能的。你可以在那里玩,也可能从那里提取文件,但这要困难得多。如果考虑到这些努力,在这种情况下容器的创建要便宜得多。@ Max到目前为止我知道,DOCKER没有一个本机解决这个任务的方法,因为<代码> DOCKER差异/代码>功能有限。