误删容器补救

  1. 去/var/lib/docker/volumes下,能够看到一系列的volumes,根据目录里面的内容、创建时间、更新时间判断哪(几)个目录是属于你删除的容器A的。
[root@localhost volumes]# ls -al
总用量 36
brw-------   1 root root 253, 0 10月 29 03:38 backingFsBlockDev
drwx-----x.  3 root root     19 10月 26 04:13 d58a4039de54eabc64dba4d7ba12d9d32c58b62a954188e98237d881c6b71a5d
drwx-----x   3 root root     19 10月 28 10:45 d7a8d8c0626e308cabaaf77440b7426277245b116f5fc5af5d0df6b1a49a3762
drwx-----x   3 root root     19 10月 28 11:24 e01143aa48cfcf9897dd7959aba77a273a91449e2040356585f7554200c5844f
drwx-----x   3 root root     19 10月 28 10:45 ee003f0d7936b7d7aa66f16a92941b9edfb12b2b4adba389d400609b938e0604
-rw-------.  1 root root  65536 10月 29 03:38 metadata.db
[root@localhost volumes]# 
[root@localhost volumes]# du -sh *
0       backingFsBlockDev
0       d58a4039de54eabc64dba4d7ba12d9d32c58b62a954188e98237d881c6b71a5d
56M     d7a8d8c0626e308cabaaf77440b7426277245b116f5fc5af5d0df6b1a49a3762
213M    e01143aa48cfcf9897dd7959aba77a273a91449e2040356585f7554200c5844f
224M    ee003f0d7936b7d7aa66f16a92941b9edfb12b2b4adba389d400609b938e0604
32K     metadata.db
  1. 先备份好这些volumes

  2. 基于相同的镜像新启动一个容器B

  3. 通过docker inspect 容器B找到容器B在/var/lib/docker/volumes中的volume目录

        "Mounts": [
            {
                "Type": "volume",
                "Name": "7a9d83fb2a2d6e882e25ffd85886ae24a6eb391b4cf81bba4033eab5099dc4a8",
                "Source": "/var/lib/docker/volumes/7a9d83fb2a2d6e882e25ffd85886ae24a6eb391b4cf81bba4033eab5099dc4a8/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
  1. 进入卷分析数据结构,新旧卷数据结构一致则为原数据

  2. 迁移

    1. 停止容器B。
    2. 删除新的卷数据,使用mv命令将旧卷数据迁移,
    3. 再次启动容器B。
  • 清除未使用的卷 docker volume prune

更多推荐