小编典典

如何在已停止/未启动的Docker容器中编辑文件

docker

为了解决我的应用程序的错误并调试问题,该应用程序分布在多个容器中,我经常在容器中编辑文件:

  • 我完全懒惰并安装nano并直接在容器中进行编辑,或者

  • 我将cp文件从容器中移出,对其进行编辑,复制并重新启动容器

这些是进入容器构建新内容之前的中间步骤,这比上述操作要花很多时间(当然,这只是中间/摆弄)。

现在,我经常破坏容器的启动程序,在这种情况下,它是节点脚本或python Web服务器脚本,通常都因语法错误而失败。

有什么办法可以保存那些容器?由于它们没有启动,因此我无法在其中执行docker exec,因此它们对我丢失了。然后在构建输入中修复有问题的文件后,我走了rm
/ rmi / build / run路线。

如何在停止的容器中编辑文件,或者在停止的容器中cp它们或启动外壳程序-可以修复该容器的任何方法?

(似乎有点像在远程计算机上工作并破坏网络配置-这种方式“永远”失去连接,并且必须使用后备(如果存在)。)

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


阅读 1656

收藏
2020-06-17

共1个答案

小编典典

回答我自己的问题..仍然希望从一个知识渊博的人那里得到更好的答案!

有两种可能性。

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对于复制在容器外部编辑的文件非常有用。

同样,如果容器无论如何或多或少地“丢失”,则应该只使用那些措施,因此任何更改都是一种改进。

2020-06-17