为了解决我的应用程序的错误并调试问题,该应用程序分布在多个容器中,我经常在容器中编辑文件:
我完全懒惰并安装nano并直接在容器中进行编辑,或者
我将cp文件从容器中移出,对其进行编辑,复制并重新启动容器
这些是进入容器构建新内容之前的中间步骤,这比上述操作要花很多时间(当然,这只是中间/摆弄)。
现在,我经常破坏容器的启动程序,在这种情况下,它是节点脚本或python Web服务器脚本,通常都因语法错误而失败。
有什么办法可以保存那些容器?由于它们没有启动,因此我无法在其中执行docker exec,因此它们对我丢失了。然后在构建输入中修复有问题的文件后,我走了rm / rmi / build / run路线。
如何在停止的容器中编辑文件,或者在停止的容器中cp它们或启动外壳程序-可以修复该容器的任何方法?
(似乎有点像在远程计算机上工作并破坏网络配置-这种方式“永远”失去连接,并且必须使用后备(如果存在)。)
如何从主机编辑Docker容器文件?看起来相关,但已过时。
回答我自己的问题..仍然希望从一个知识渊博的人那里得到更好的答案!
有两种可能性。
1) 直接在主机上编辑文件系统 。这有些危险,并且有可能完全破坏容器,并可能根据发生的问题而破坏其他数据。
2) 将启动脚本更改为 永不失败的内容,例如启动bash,进行修复/编辑,然后将启动程序再次更改为所需的程序(例如节点或之前的版本)。
更多细节:
1)使用
docker ps
查找正在运行的容器或
docker ps -a
查找所有容器(包括停止的容器)并
docker inspect (containername)
查找“ Id”,第一个值之一。
这是包含实现细节的部分,可能会更改,请注意,这样可能会丢失容器。
去
/var/lib/docker/aufs/diff/9bc343a9..(long container id)/
在那里您将找到所有更改为容器所基于的图像的文件。您可以覆盖文件,添加或编辑文件。
同样,我不建议这样做。
2)您可以在以下路径找到配置jsonconfig.json
/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对于复制在容器外部编辑的文件非常有用。
同样,如果容器无论如何或多或少地“丢失”,则应该只使用那些措施,因此任何更改都是一种改进。