如何从容器内获取Docker快照?

时间:2019-12-12 19:42:09

标签: docker containers

从容器本身内部获取容器快照的好方法是什么?

上下文:

我有一个集装箱Foo

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

我已经看到this answer可以让我从容器到主机系统运行任意命令,但是我宁愿避免这种情况,因为这会使Foo在主机系统上有太多的自由。

希望大家都可以提供一个更简单的选择。

关于安全性:就我的情况而言,安全性问题并不是一个太大的问题(请相信我),但是我不希望我的用户不容易将自己打造成脚。

2 个答案:

答案 0 :(得分:1)

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

在容器内部,通过调用commit 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"

答案 1 :(得分:0)

您可以实施the answer to which you linked中建议的解决方案,但不要盲目执行所有内容,而是解析命令并仅响应某些字符串。例如,当容器将“快照”写入命名管道时,请执行创建快照所需的任何逻辑。如果容器在管道中写入“ rm -rf /”,则将其忽略。