mbind: Operation not permitted
- 前言:
- 正文:
- 结论 :
前言:
用数据库处理平台问题今天报错,mbind: Operation not permitted
。
mbind 不允许操作
,一头雾水这是什么意思。
网上找了很多资料大概意思是:
这个错误通常表示操作系统或系统管理员已经限制了进程的内存绑定操作。内存绑定是一种将进程的内存映射到特定的物理内存区域的操作,这可以提高性能或者确保一些特定的内存访问策略。但是,在某些环境下,比如虚拟化环境或者受限制的系统中,可能会禁止这种操作。
我是用docker
进行处理的,也就是docker虚拟化容器技术。所以这个问题需要docker
买单。对于MySQL
来说,这个错误可能会影响其正常的运行的,因为我系统已经挂了几次了,几次链接不上mysql
。那么如果说是docker
问题,这个问题还是需要从docker
入手。
从资料上面了解到,Seccomp(Secure Computing Mode)
是Linux内核
提供的一种安全特性,它可以限制进程能够执行的系统调用。这种限制可以帮助提高系统的安全性,尤其是在容器化环境中,通过限制容器内进程的系统调用,可以减少攻击面,提高整体系统的安全性。
在Docker
中,Seccomp
可以被用来限制容器内进程所能执行的系统调用,从而降低潜在的攻击风险。然而,有时候过于严格的Seccomp
规则可能会导致一些应用程序无法正常运行,比如现在遇到的MySQL
问题就可能是由于Seccomp
规则限制了某些MySQL
进程所需的系统调用而导致的。
为了解决这类问题,需要考虑修改Docker
的Seccomp
配置,放宽对某些系统调用的限制来看看;
正文:
要放宽Docker
对Seccomp
配置的限制,可以按照以下步骤进行:
首先了解当前的Seccomp
配置: 需要了解当前Docker
容器的Seccomp
配置。
docker inspect <container_name> | grep Seccomp
docker inspect mysql | grep Seccomp
我的没有配置信息
我的机器是阿里云机器ecs
默认指定的docker环境
,所以可能 Docker 守护程序(Docker daemon)
使用了默认的 Seccomp
配置。
去github docker/mysql
里面查一下这个问题,没想到让我get
到了
我用的是8.+ 这个人一路试到5.7.8
没有这个问题,所以第一个解法有了
github docker/mysql
关于关闭muysql
的seccomp
配置文件的检验从这个人说的,keeps restarting
看来也没有什么作用
security_opt:- seccomp:unconfined
这个人说的靠谱。知道是安全校验问题,还是要回归到安全校验问题上去。
在Docker
中这样做的最简单方法是添加 SYS_NICE
功能,这将自动调整默认的 seccomp
配置文件以包含必要能力
尝试一下啊:
结论 :
其实这个是取巧的办法增加他的权限而已:关于cap_add 解释是这样的:
cap_add
是Docker Compose
中用来添加 Linux
的特权(capabilities)
的选项之一,而 SYS_NICE
是其中的一种特权。 SYS_NICE
允许进程修改其优先级(nice值)。通过添加 SYS_NICE
特权,你可以允许容器中的进程修改其优先级。
如果还是有问题,其实还是需要对容器或者系统这个下面的seccomp
进行加权配置了 目前我的问题解决了