欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Errorresponsefromdaemon:devmapper:Errormounting‘/dev/mapper/docker容器无法启动

时间:2023-06-23
目录

一,问题描述二,问题原因

1,排查2,原因 三,解决方案

1,方案一

方案利弊 2,方案二

方案利弊 知识点补充 一,问题描述

物理机(或虚拟机)重启后,之前创建的容器启动报错,无法启动。
报错如下

Error response from daemon: devmapper: Error mounting '/dev/mapper/docker-253:0-674-95585c503aef3448b0531bc24ab0c4bbc6ad4af2df0a2fe3c18ada4f1348f26c' on '/var/lib/docker/devicemapper/mnt/95585c503aef3448b0531bc24ab0c4bbc6ad4af2df0a2fe3c18ada4f1348f26c': invalid argumentError: failed to start containers: d70791db5636

二,问题原因 1,排查

使用 getenforce 命令可以发现 selinux(是 Linux 的一个安全子系统,有权限管理的作用)是disabled的状态

并且在 /var/lib/docker/containers/你的容器id/ 目录下,查看 config.v2.json 文件

可以看到MountLabel和ProcessLabel都携带了selinux的参数

2,原因

在 selinux 为 开启 的时候,创建了容器,这个容器的MountLabel和ProcessLabel配置有了selinux的参数。之后因为某些原因将 selinux 修改为 disabled(重启后生效)。然后物理机(虚拟机)重启之后,selinux 为disabled状态,这个时候启动容器,导致容器创建时和启动时selinux上下文不一致,所以出错

三,解决方案 1,方案一

如下图,修改 config.v2.json 文件,把MountLabel和ProcessLabel设置为空


然后重启docker(重启后配置才生效)

systemctl restart docker

现在启动容器就可以成功了

方案利弊

不用重启物理机或虚拟机,但是如果出现问题的容器过多,手动修改很耗时

2,方案二

将selinux设置为permissive
selinux三种模式简介:

Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正确会发出警告Disabled:关闭模式。SELinux并没有实际运行

//编辑配置文件vim /etc/sysconfig/selinux

//重启机子reboot//重启后查看selinux状态就不是disabled了 这时候启动容器就可以成功了getenforce

方案利弊

这个方案可以一次性解决出现这个问题的所有容器,就是需要重启,有特殊原因不能重启还是采用方案一吧

知识点补充

在selinux开启时切换状态,可以使用命令:

// 切换到permissivesetenforce 0// 切换到enforcing setenforce 1

注意在开启状态不能直接切换到关闭状态,反过来也一样,切换需要修改配置文件后重启

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。