可能从Docker镜像检索不是容器的文件?

我创build了一个使用docker的应用程序。 我已经build立了像这样的图像: docker build -t myapp .

在我的映像中(使用docker run -it myapp /bin/bash进行访问),将创build一个映像文件。

我想获取该文件在本地查看,因为我发现在Docker上查看图像是一个复杂的过程。

我尝试了以下: docker cp myapp:/result.png ./根据在网上看到的build议,但我得到以下错误: Error response from daemon: No such container: myapp

图像名称!=容器名称

myapp图像的名称,它不是正在运行的容器。

当你使用docker run ,你正在创build一个基于myapp映像的容器。 它将被分配一个ID,你可以看到docker ps 。 例:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aa58c8ff2f34 portainer/portainer "/portainer" 4 months ago Up 5 days 0.0.0.0:9909->9000/tcp portainer_portainer_1 

在这里你可以看到一个基于portainer/portainer图像的容器。 它有ID aa58c8ff2f34

一旦你有你的容器的ID,你可以把它传递给docker cp来复制你的文件。

指定容器名称

另一种方法,如果你是自动化/编写脚本的东西,这可能是最好的select,那就是指定容器的名字,而不必查找它。

 docker run -it --name mycontainer myapp /bin/bash 

这将创build一个名为mycontainer的容器。 然后,您可以将该名称提供给docker cp或其他命令。 请注意,您的容器仍然具有上述示例中的ID,但您也可以使用此名称来引用它。

您可以将本地文件夹映射到映像中的卷,然后以这种方式将文件从映像中复制出来。

 docker run -it -v /place/to/save/file:/store myapp /bin/bash cp /result.png /store/