当容器无法启动时,获取容器内数据(非数据卷内数据)
- 利用容器ID查询容器对应设备的元数据
[root@bogon ~]cat /var/lib/docker/devicemapper/metadata/<container_ID>
{"device_id":22,"size":107374182400,"transaction_id":24,"initialized":false}
- 计算块数量,每块512k,由上一步的size/512得到
[root@bogon ~]# echo $((107374182400/512))
209715200
- 通过命令docker info得到Pool Name
[root@bogon ~]# docker info
Containers: 3
Images: 58
Storage Driver: devicemapper
Pool Name: docker-thinpool
... - 激活容器对应块设备
[root@bogon ~]#dmsetup create dev-604f --table "0 209715200 thin /dev/mapper/docker-thinpool 22"
[注] "dev-604f" 为自行定义的设备名,可自行任意定义
"209715200 " 为第2步的计算值
"docker-thinpool" 为Pool Name
"22" 为device_id
- 成功后在/dev/mapper目录下出现名为"dev-604f"的设备
[root@bogon ~]# ls /dev/mapper/
control dev-604f docker-meta docker-thinpool docker-thinpool_tdata docker-thinpool_tmeta
- 将生成设备挂载到任意目录,便可查看设备中内容
[root@bogon ~]#mkdir temp
[root@bogon ~]#mount /dev/mapper/dev-604f ./temp
[root@bogon ~]#cd temp/rootfs/
- 用完后删除设备(先退出挂载目录)
[root@bogon ~]umount ./temp
[root@bogon ~]dmsetup remove dev-604f