当前位置: 首页 > 面试题库 >

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

汲利
2023-03-14
问题内容

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

  • 我完全懒惰并安装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对于复制在容器外部编辑的文件非常有用。

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



 类似资料:
  • 试图修复我的应用程序在多个容器上拆分的错误和调试问题,我经常编辑容器中的文件: > 要么我完全懒惰,直接在容器中安装nano并进行编辑,要么 我将文件从容器中取出,编辑它,复制回来,然后重新启动容器 这些都是为容器构建新内容之前的中间步骤,这比执行上述操作要长得多(当然,这只是中间步骤)。 现在我经常破坏容器的启动程序,在破坏情况下是节点脚本或python webserver脚本,两者通常都因语法

  • 问题内容: 我使用以下命令从映像启动docker容器: 当完成后,容器停止(我想这已停止),但它并没有被删除,因为我可以用这个命令来查看它: 有什么办法可以使用相同的参数将此容器保持由生成的数据? 问题答案: 是的,当初始命令完成执行后,容器将停止。 您可以使用以下方法启动已停止的容器: 如果要查看命令的输出,则应添加选项: PS。有一个,但用于重新启动正在运行的容器-我相信情况并非如此。

  • 问题内容: 我想用另一个命令启动一个停止的Docker容器,因为默认命令崩溃了-这意味着我无法启动该容器,然后使用’docker exec’。 基本上,我想启动一个外壳,以便可以检查容器的内容。 幸运的是,我使用-it选项创建了容器! 问题答案: 提交停止的容器: 此命令将修改后的容器状态保存到新映像中 从另一个入口点开始/运行: 入口点参数描述:https ://docs.docker.com/

  • 我想用不同的命令启动已停止的Docker容器,因为默认命令崩溃——这意味着我不能启动容器,然后使用“docker exec”。 基本上,我想开始一个外壳,这样我就可以检查容器的内容。 幸运的是,我用-it选项创建了这个容器!

  • 这个问题展示了如何从停止的容器中复制文件。这要求我知道文件的完整路径,包括其文件名。我知道要从中复制文件的目录,但我不知道它的文件名,因为它是动态生成的。如何列出已停止Docker容器中目录中的文件? 如果Docker容器正在运行,那么下面的Docker命令非常有效。但是,如果Docker容器停止,它将失败。 注意:文件不存储在持久卷中。

  • 我正在从docker容器中运行elasticsearch。 在为ssl和屏蔽配置elasticsearch时,我的文件获得非法条目,即而不是。 现在我的docker容器没有启动,并出现以下错误: 如何在不丢失数据的情况下编辑或替换它,或替换现有容器中的文件?