从容器本身内部获取容器快照的好方法是什么?
我有一个集装箱Foo
当在容器Foo上发生某些事件时,我想拍摄容器Foo的快照,标记图像,并有选择地将该快照推送到存储库。
我已经看到this answer可以让我从容器到主机系统运行任意命令,但是我宁愿避免这种情况,因为这会使Foo在主机系统上有太多的自由。
希望大家都可以提供一个更简单的选择。
关于安全性:就我的情况而言,安全性问题并不是一个太大的问题(请相信我),但是我不希望我的用户不容易将自己打造成脚。
答案 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 /”,则将其忽略。