首页 > 解决方案 > 如何从容器中获取 docker 快照?

问题描述

从容器本身拍摄容器快照的好方法是什么?

语境:

我有一个容器 Foo

当容器 Foo 上发生某些事件时,我想拍摄容器 Foo 的快照,标记图像,并可选择将该快照推送到存储库。

我已经看到了这个答案,它可以让我从容器运行任意命令到主机系统,但我宁愿避免这种情况,因为这给 Foo 在主机系统上提供了太多的自由。

我希望你们都可以提供一个更简单的选择。

关于安全性:在我的场景中,安全问题不是太大的问题(相信我),但我不想让我的用户很容易自取其辱。

标签: dockercontainers

解决方案


将 docker 套接字安装到您的容器中(-v /var/run/docker.sock:/var/run/docker.sock)并使用 docker api。

从容器内部通过调用提交 api 从您的容器创建一个图像:

curl -v --unix-socket /var/run/docker.sock -X POST "http:/v1.40/commit?container=[YOUR CONTAINER NAME OR ID]&repo=[IMAGE NAME]&tag=[IMAGE TAG]&pause=false"

例如:

curl -v --unix-socket /var/run/docker.sock -X POST "http:/v1.40/commit?container=dummy&repo=my-dummy-image-2&tag=1&pause=false"

然后,您可以使用 push api 将该图像推送到存储库:

curl -v --unix-socket /var/run/docker.sock -X POST "http:/v1.40/images/[IMAGE NAME]/push"

推荐阅读