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

时间:2018-02-16 19:52:08

标签: docker

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

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

PairGrid

6 个答案:

答案 0 :(得分:12)

This answer另一个问题显示了如何使用另一个命令启动已停止的容器。以下是列出已停止容器中文件的命令。

  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

答案 1 :(得分:1)

启动容器不是一种选择时,您始终可以导出图像(有点过头,但是..)并列出其内容:

docker export -o dump.tar <container id>

tar -tvf dump.tar

参考:Baeldung - Exploring a Docker Container’s Filesystem

答案 2 :(得分:0)

尝试将container-diff--type=file选项一起使用。这将比较两个图像并报告添加,删除和修改的文件。

如果自容器启动以来文件没有更改,那么您将必须知道启动容器的原始映像的内容。因此,此答案并不理想,但避免创建图像并运行它。

此工具要求您首先使用docker commit创建已停止的Docker容器的映像。

这是安装它的命令:

curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 \
    && chmod +x container-diff-linux-amd64 \
    && mkdir -p $HOME/bin \
    && export PATH=$PATH:$HOME/bin \
    && mv container-diff-linux-amd64 $HOME/bin/container-diff

以下是使用该实用程序的命令:

container-diff analyze $IMAGE --type=file

答案 3 :(得分:0)

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

如果自容器启动以来文件没有更改,那么您将必须知道启动容器的原始映像的内容。因此,此答案并不理想,但避免创建图像并运行它。

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

答案 4 :(得分:-1)

如果要查看某些文件内容,建议使用docker container cp命令。这是doc。它适用于停止的容器。示例:

docker container cp 02b1ef7de80a:/etc/nginx/conf.d/default.conf ./

这样,我获得了在启动过程中通过模板化引擎生成的配置文件。

答案 5 :(得分:-1)

docker container cp <STOPPED_CONTAINER_ID>:<PATH_TO_FILE> -

在命令末尾注意“-”。

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

感谢@ azat-khadiev的指示(我不知道您为什么得到“ -1表示答案...”