复制docker容器进行debugging
我有一个正在运行的docker集装箱。 我在运行的docker容器中做了一些有用的工作。 我已经完成了这些作品不是docker文件的一部分,我已经在容器内完成了它。[例如:我已经在容器中安装了ping,而不是从docker文件]
现在,我被困在一个地方。 我不确定我是否在同一个容器中进行debugging,我可能会放弃在容器内部迄今为止所做的事情。
所以我想创build一个与运行容器中可用的所有东西的复制副本[就像我不想从图像构build一个容器,并重复运行的容器中实现的所有suucessful步骤,然后开始我的debugging。 我不想在我的第二个容器重新安装ping]。
完全,我怎样才能复制一个容器? 如果不是什么都有可能性?
-
创build一个基本的图像,并运行它
docker run -it <base_image> /bin/bash
-
进行必要的更改
yum install ping
-
提交一个新的名字
docker commit <hash tag of running container> new_image
现在,如果你通过运行打开new_image
docker run -it new_image /bin/bash
你可以看到ping
被安装在里面。
打开base_image并且没有安装ping
。
希望它回答你的问题。
如果你想保存你的修改,你可以使用docker commit
,请参阅文档http://docs.docker.com/reference/commandline/cli/#commit ,你也可以保存一个容器, http://docs.docker的.com /参考/命令行/ CLI /#节省
从docker执行1.0.1(服务器/客户端API 1.12),只支持暂停/恢复操作。
但就进程的快照(在提交+推)而言,这些不起作用(不支持,虽然我没有检查文档)
总之,1)保持运行过程的状态是不可能的! 2)对文件系统(永久存储)所做的所有更改都可以保存(并可以提交并推送到存储库)。
docker commit
对于将文件更改保存到一个新的映像中是很好的,但是它不会保存内存的变化,打开进程等。与stream行的观点相反,后者对于docker checkpoint
是可行的。 文档和示例 。
注意:现在,– --checkpoint-dir
选项被破坏: issue , pull 。 这就是为什么像checkpoint_dir
(见代码)这样的解决方法是必要的。 这个答案应该可能在几个星期内更新。
检查点是不可能的 。 这可能会很快改变 。 但是,可以使用exec在恢复过程之后附加新的TTY。
你需要安装criu 。 之后,首先,
echo "{\"experimental\": true}" >> /etc/docker/daemon.json systemctl restart docker
, 然后
#!/bin/bash # tty (-t) not supported docker run -i -d --name sleeper\ busybox sh -c 'sleep 10000' # Makes a snapshot and stops the container (except if --leave-running is active). --checkpoint-dir is broken. docker checkpoint create sleeper cp # sleeper container exited # Create the clone docker create -i --rm --name clone\ busybox # Start the clone checkpoint_dir="/var/lib/docker/containers/$(docker ps -aq --no-trunc -f name=sleeper)/checkpoints" docker start --checkpoint-dir=$checkpoint_dir --checkpoint=cp clone # Attach new TTY docker exec -it clone sh
现在在tty中inputps -e
,你会看到在sleeper
容器中启动的进程,现在继续进行clone
。
checkpoint
把硬盘的容器制作成一个完整的蓝图,可以在机器之间进行交换。 此function使用criu并且是实验性的。 Criu本身不能创buildX11应用程序的蓝图 。
另一方面pause
只在内部冻结容器。 暂停的容器除了暂停以外,没有任何可以做的事情。
- 如果Docker容器容器退出,则使Jenkins构build失败
- 如何使用Docker镜像打包文件
- Tensorflow不会生成pb文件。如何解决?
- replacedockerfile中的第一个cmd值
- 无法使用Rex-Ray和VirtualBox Media存储将持久卷装载到Docker容器 – “托pipe对象引用无效”错误
- Docker – 如何设置本地web服务器
- Nginx / Node.JS – 只有在节点服务器完全启动后才启动Nginx
- 如何解决“invoke-rc.d:policy-rc.d拒绝执行启动”当build立一个容器Ubuntu 14.04和安装apache2?
- 在Dockerrun.aws.json中做什么“日志logging”?