如何在已停止/未启动泊坞窗容器中编辑文件
试图修复错误和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地“丢失”,那么就应该回到那些措施,所以任何改变都是一个改进。