容器Merged聚合层丢失处理

服务器强制断电导致Docker容器 Merged聚合层 丢失

背景说明:物业转电,机房服务器强制断电,恢复供电后,服务器重新启动,发现容器无法启动

查看容器情况

# 发现容器挂了
[root@20-121 ~]# docker ps -a
CONTAINER ID   IMAGE        COMMAND            CREATED         STATUS      PORTS                      NAMES
... ...
4e071c2b26cb   zentao:v9.0.1           "/bin/sh /opt/run.sh"    2 years ago     Exited (255) 3 days ago        zentao
... ... 

# 直接重启发现找不到 merged 层
[root@20-121 ~]# docker restart zentao
Error response from daemon: Cannot restart container zentao: error creating overlay mount to /data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/merged: no such file or directory

# 确认merged目录存在
[root@20-121 ~]# ll /data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/merged
ls: 无法访问/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/merged: 没有那个文件或目录

确认merged已丢失,这里猜测是因为机器强制断电,导致容器merged聚合层丢失

查看对应容器数据结构

docker inspect zentao
... ...
        "GraphDriver": {
            "Data": {
                "LowerDir": "/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385-init/diff:/data04/docker-data/overlay2/dd0313cf5d59560d7785a132205f622d30e741fd2362a9bf3d35111f68cdceae/diff:/data04/docker-data/overlay2/27b3c424054ca45020756b470b4564a44b0c0033fe72fe1403e44b9b4dfcc021/diff:/data04/docker-data/overlay2/c6f32c031dc415fafd99bcbb252f1d7b014c464f0d49406ceac0fc531768c17d/diff:/data04/docker-data/overlay2/1d6cdd959d67a7220de9132b613d43c1b47954ef7eefd6aefff2be8367e7e061/diff:/data04/docker-data/overlay2/a4beb7b1d27e0b19434d0458c7f921bc59512261e3f778eb244a27de1747f6b1/diff:/data04/docker-data/overlay2/25db583d880ae3d87502ad8ef3d55bc7cca306ec5a86fab1b34ac0eafbfcdd09/diff:/data04/docker-data/overlay2/1b6474e5dba65135459983c38d94ee82b0f9b8f6bafda3279e888334032f3bc7/diff:/data04/docker-data/overlay2/2674f00cb5aba0b1b7e67baba253e264eaf7052b34bb87d30a135f9cb1192292/diff:/data04/docker-data/overlay2/a4feaf6effd463ebaa608ce14913da91825c5ecacbe66baf3bb18039006e1050/diff:/data04/docker-data/overlay2/b69127f520a115053d477d95ba5dbfd74ad8006a80bc7c8008db7b646ad6bc84/diff",
                "MergedDir": "/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/merged",
                "UpperDir": "/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/diff",
                "WorkDir": "/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/work"
            },
            "Name": "overlay2"
        },
... ...

重新挂载Merged层

重新创建个空目录作为merged层的挂载点

[root@20-121 ~]# cd /data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/
[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# mkdir -p merged

手动重建merged层,示例用法:[mount -t overlay overlay -o lowerdir=...,upperdir=...,workdir=... /data/docker-data/xxxxx/merged]

# 以下是完整命令示例
[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# mount -t overlay overlay -o lowerdir=/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385-init/diff:/data04/docker-data/overlay2/dd0313cf5d59560d7785a132205f622d30e741fd2362a9bf3d35111f68cdceae/diff:/data04/docker-data/overlay2/27b3c424054ca45020756b470b4564a44b0c0033fe72fe1403e44b9b4dfcc021/diff:/data04/docker-data/overlay2/c6f32c031dc415fafd99bcbb252f1d7b014c464f0d49406ceac0fc531768c17d/diff:/data04/docker-data/overlay2/1d6cdd959d67a7220de9132b613d43c1b47954ef7eefd6aefff2be8367e7e061/diff:/data04/docker-data/overlay2/a4beb7b1d27e0b19434d0458c7f921bc59512261e3f778eb244a27de1747f6b1/diff:/data04/docker-data/overlay2/25db583d880ae3d87502ad8ef3d55bc7cca306ec5a86fab1b34ac0eafbfcdd09/diff:/data04/docker-data/overlay2/1b6474e5dba65135459983c38d94ee82b0f9b8f6bafda3279e888334032f3bc7/diff:/data04/docker-data/overlay2/2674f00cb5aba0b1b7e67baba253e264eaf7052b34bb87d30a135f9cb1192292/diff:/data04/docker-data/overlay2/a4feaf6effd463ebaa608ce14913da91825c5ecacbe66baf3bb18039006e1050/diff:/data04/docker-data/overlay2/b69127f520a115053d477d95ba5dbfd74ad8006a80bc7c8008db7b646ad6bc84/diff,upperdir=/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/diff,workdir=/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/work /data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/merged
mount: 特殊设备 overlay 不存在

挂载报错,确认各镜像层lowerdir,可写层upperdir情况

[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# ll /data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385-init/diff

... ...
[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# ll /data04/docker-data/overlay2/dd0313cf5d59560d7785a132205f622d30e741fd2362a9bf3d35111f68cdceae/diff
ls: 无法访问/data04/docker-data/overlay2/dd0313cf5d59560d7785a132205f622d30e741fd2362a9bf3d35111f68cdceae/diff: 没有那个文件或目录

发现还有个diff目录丢失了,去掉已丢失的diff层,继续重构merged层

[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# mount -t overlay overlay -o lowerdir=/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385-init/diff:/data04/docker-data/overlay2/27b3c424054ca45020756b470b4564a44b0c0033fe72fe1403e44b9b4dfcc021/diff:/data04/docker-data/overlay2/c6f32c031dc415fafd99bcbb252f1d7b014c464f0d49406ceac0fc531768c17d/diff:/data04/docker-data/overlay2/1d6cdd959d67a7220de9132b613d43c1b47954ef7eefd6aefff2be8367e7e061/diff:/data04/docker-data/overlay2/a4beb7b1d27e0b19434d0458c7f921bc59512261e3f778eb244a27de1747f6b1/diff:/data04/docker-data/overlay2/25db583d880ae3d87502ad8ef3d55bc7cca306ec5a86fab1b34ac0eafbfcdd09/diff:/data04/docker-data/overlay2/1b6474e5dba65135459983c38d94ee82b0f9b8f6bafda3279e888334032f3bc7/diff:/data04/docker-data/overlay2/2674f00cb5aba0b1b7e67baba253e264eaf7052b34bb87d30a135f9cb1192292/diff:/data04/docker-data/overlay2/a4feaf6effd463ebaa608ce14913da91825c5ecacbe66baf3bb18039006e1050/diff:/data04/docker-data/overlay2/b69127f520a115053d477d95ba5dbfd74ad8006a80bc7c8008db7b646ad6bc84/diff,upperdir=/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/diff,workdir=/data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/work /data04/docker-data/overlay2/d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385/merged

查看构建好的merged层,发现数据结构还是比较完整的

[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# ll merged/
总用量 12
-rw-r--r--  1 root root 12053 12月  4 2018 anaconda-post.log
lrwxrwxrwx  1 root root     7 12月  4 2018 bin -> usr/bin
drwxr-xr-x  1 root root    59 8月  15 2022 dev
drwxr-xr-x  1 root root    66 8月  15 2022 etc
drwxr-xr-x  2 root root    10 4月  11 2018 home
lrwxrwxrwx  1 root root     7 12月  4 2018 lib -> usr/lib
lrwxrwxrwx  1 root root     9 12月  4 2018 lib64 -> usr/lib64
drwxr-xr-x  2 root root    10 4月  11 2018 media
drwxr-xr-x  2 root root    10 4月  11 2018 mnt
drwxr-xr-x  1 root root    49 8月  15 2022 opt
drwxr-xr-x  2 root root    10 12月  4 2018 proc
dr-xr-x---  1 root root    35 5月  11 2020 root
drwxr-xr-x 11 root root   192 12月  4 2018 run
lrwxrwxrwx  1 root root     8 12月  4 2018 sbin -> usr/sbin
drwxr-xr-x  2 root root    10 4月  11 2018 srv
drwxr-xr-x  2 root root    10 12月  4 2018 sys
drwxrwxrwt  1 root root    10 4月   7 13:56 tmp
drwxr-xr-x 13 root root   207 12月  4 2018 usr
drwxr-xr-x 18 root root   318 12月  4 2018 var

重新启动容器

[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# docker restart zentao
zentao

[root@20-121 d20f59f0e47adad276352a859d27da19097410e8198c2e840681738e79b5b385]# docker ps -a
CONTAINER ID   IMAGE                          COMMAND                  CREATED         STATUS         PORTS                                                                                       NAMES
4e071c2b26cb   zentao:v9.0.1                  "/bin/sh /opt/run.sh"    2 years ago     Up 2 seconds   0.0.0.0:8060->80/tcp, :::8060->80/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp            zentao
... ...

服务恢复完毕,验证即可

posted @ 2025-04-23 10:12  cumybride  阅读(63)  评论(0)    收藏  举报