如何在已停止/未启动泊坞窗容器中编辑文件

试图修复错误和debugging我的应用程序分割在几个容器的问题,我经常编辑容器中的文件:

  • 要么我是完全懒惰,并安装纳米和直接在容器或编辑

  • 我docker cp文件的容器,编辑它,将其复制并重新启动容器

这些是在为容器构build新内容之前的中间步骤,这要比上面做的要长得多(当然这只是中间/摆弄)。

现在我经常打破容器的起始程序,在破坏的情况下,它是一个节点脚本或一个python web服务器脚本,通常都会因语法错误而失败。

有什么方法可以保存这些容器吗? 既然他们没有开始,我就不能把执行官塞进他们,所以他们就会迷失在我的脑海里。 然后在构buildinput中修复有问题的文件之后,再转到rm / rmi / build / runpath。

我怎样才能编辑一个停止的容器中的文件,或者在一个已停止的容器中启动一个shell,或者让它修复这个容器的任何东西?

(这看起来有点像在远程计算机上工作,打破了networkingconfiguration – 这种方式连接永远丢失,如果存在,就必须使用后备)。

如何从主机编辑Docker容器文件? 看起来相关但已过时。

回答我自己的问题..仍希望从一个更有知识的人更好的答案!

有两种可能性。

1) 直接在主机上编辑文件系统 。 这是有点危险的,有可能完全打破容器,可能其他数据取决于哪里出了问题。

2) 将启动脚本更改为永不失败的东西,例如启动bash,执行修复/编辑,然后再次将启动程序更改为所需的启动脚本 (如节点或之前的任何其他脚本 )。

更多细节:

1)使用

 docker ps 

find正在运行的容器或

 docker ps -a 

find所有的容器(包括停止的)和

 docker inspect (containername) 

寻找“Id”,这是第一个价值观之一。

这是包含实现细节并可能改变的部分,请注意,您可能会以这种方式丢失容器。

 /var/lib/docker/aufs/diff/9bc343a9..(long container id)/ 

在那里你会发现所有的文件都改变了容器所依据的图像。 您可以覆盖文件,添加或编辑文件。

再次,我不会推荐这个。

2)正如在https://stackoverflow.com/a/32353134/586754所述,你可以findconfigurationjson config.json在一个path

 /var/lib/docker/containers/9bc343a99..(long container id)/config.json 

在那里,你可以将参数从“nodejs app.js”改为“/ bin / bash”。 现在重新启动Docker服务并启动容器(您应该看到它现在正确启动)。 你应该使用

 docker start -i (containername) 

确保它不会马上退出。 您现在可以使用容器和/或稍后使用

 docker exec -ti (containername) /bin/bash 

而且,docker cp对复制在容器外编辑的文件非常有用。

而且,如果集装箱或多或less地“丢失”,那么就应该回到那些措施,所以任何改变都是一个改进。