如何列出已停止的Docker容器中的文件

Nat*_*han 10 docker

此问题显示如何从已停止的容器中复制文件.这要求我知道文件的完整路径,包括其文件名.我知道我要复制文件的目录,但我不知道它的文件名,因为它是动态生成的.如何列出已停止的Docker容器中的目录中的文件?

如果Docker容器正在运行,以下Docker命令可以正常工作.但是,如果Docker容器停止,它将失败.

docker exec --privileged MyContainer ls -1 /var/log
Run Code Online (Sandbox Code Playgroud)

Nat*_*han 16

这样的回答另一个问题时展示如何启动另一个命令停止容器.以下是列出已停止容器中的文件的命令.

  1. 将已停止的容器提交到新映像:test_image.
    • docker commit $CONTAINER_ID test_image
  2. 在带有shell的新容器中运行新映像.
    • docker run -ti --entrypoint=sh test_image
  3. 在新容器中运行list file命令.
    • docker exec --privileged $NEW_CONTAINER_ID ls -1 /var/log

  • 如果你可以启动 docker,那就太好了,但是如果它被阻止并且你无法启动它,那就真的没有帮助了。难道真的没有办法列出未运行的 docker 的文件吗?! (2认同)
  • @AlexisWilke 我从未遇到过阻塞的容器。由于此解决方案适用于我的所有用例,因此我从未尝试弄清楚如何列出文件或将文件复制出容器。如果您找到解决方案,请发布答案。您可以尝试根据您的具体情况提出问题。 (2认同)

Aza*_*iev 15

如果你想查看某个文件内容,我建议使用docker container cp命令。这是文档。它适用于停止的容器。例子:

docker container cp 02b1ef7de80a:/etc/nginx/conf.d/default.conf ./
Run Code Online (Sandbox Code Playgroud)

这样我就得到了模板引擎在启动过程中生成的配置文件。

  • 这个答案已经在问题的链接中提到。它没有回答问题。问题是列出已停止容器中目录中的文件。问题不在于如何复制文件。 (2认同)

Nat*_*han 6

该命令docker diff *CONTAINER*将列出自容器启动以来添加、删除和更改的文件。

如果自容器启动后文件没有更改,则您必须知道启动容器的原始映像的内容。所以,这个答案并不理想,但避免了创建图像并运行它。

与 不同container-diff,此命令不需要先创建 Docker 映像。


LVi*_*aca 5

当启动容器不是一种选择时,您可以随时导出您的图像(有点矫枉过正,但是..)并列出其内容:

docker export -o dump.tar <container id>

tar -tvf dump.tar
Run Code Online (Sandbox Code Playgroud)

参考:Baeldung - 探索 Docker 容器的文件系统

  • 命令“docker diff”将列出自容器启动以来添加、删除和更改的文件和目录。这比导出要快得多。 (2认同)

小智 5

docker container cp <STOPPED_CONTAINER_ID>:<PATH_TO_FILE> -
Run Code Online (Sandbox Code Playgroud)

请注意命令末尾的“-”。

它实际上将指定文件从停止的容器“复制”到“stdout”中。换句话说,它只是打印文件内容。

感谢@azat-khadiev 的指导(我不知道为什么你的答案是“-1...)


归档时间:

查看次数:

7358 次

最近记录:

7 年,8 月 前