可能从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/