{{3}}显示了如何从已停止的容器中复制文件。这要求我知道文件的完整路径,包括其文件名。我知道我要复制文件的目录,但我不知道它的文件名,因为它是动态生成的。如何在已停止的Docker容器中的目录中列出文件?
如果Docker容器正在运行,则以下Docker命令可以正常工作。但是,如果Docker容器停止,它将失败。
PairGrid
答案 0 :(得分:12)
This answer另一个问题显示了如何使用另一个命令启动已停止的容器。以下是列出已停止容器中文件的命令。
test_image
。
docker commit $CONTAINER_ID test_image
docker run -ti --entrypoint=sh test_image
docker exec --privileged $NEW_CONTAINER_ID ls -1 /var/log
答案 1 :(得分:1)
启动容器不是一种选择时,您始终可以导出图像(有点过头,但是..)并列出其内容:
docker export -o dump.tar <container id>
tar -tvf dump.tar
答案 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表示答案...”