docker容器 MYSQL MBIND: OPERATION NOT PERMITTED
时间: 2023-05-26 11:03:44 浏览: 101
该错误可能是由于Docker主机上的SELinux或AppArmor策略引起的。
如果您使用的是SELinux,请确保已加载的策略允许Docker容器执行mmap并使用内存映射文件。您可以通过以下命令来检查SELinux状态:
```
$ sestatus
```
如果策略未启用,请使用以下命令启用它:
```
$ setenforce 1
```
如果您使用的是AppArmor,请编辑Docker配置文件,以便将带有mmap和memlock权限的AppArmor profile应用于MySQL容器。您可以尝试以下命令:
```
$ sudo aa-complain docker-mysql
$ sudo systemctl restart docker
```
如果上述步骤无效,您可以尝试在Docker主机上升级内核或重启系统。如果还不行,您可以尝试使用 --cap-add=SYS_NICE 选项在Docker容器中启用内存锁定。例如:
```
$ docker run --cap-add=SYS_NICE -d mysql
```
相关问题
chmod: changing permissions of 'docker.sock': Operation not permitted
这个问题可能是关于 Linux 文件权限的问题。这个错误提示表明当前用户没有足够的权限来更改 docker.sock 文件的权限。可能需要以 root 用户身份运行 chmod 命令或者使用 sudo 命令来提升权限。
Docker容器内部执行service mysql status报错:Failed to get D-Bus connction: Operation not permitted
这个错误通常是由于容器内部缺少systemd进程导致的。systemd是一个系统和服务管理器,它是Linux系统中的一个重要组件,而Docker容器通常不包含systemd进程。因此,当你在容器内部执行systemctl命令时,就会出现“Failed to get D-Bus connection: Operation not permitted”的错误。
解决这个问题的方法之一是使用systemctl的替代方案。你可以使用service命令来启动、停止和重启服务。例如,要在容器内部重启MySQL服务,你可以使用以下命令:
```shell
service mysql restart
```
如果你仍然想在容器内部使用systemctl命令,你可以考虑使用systemd-nspawn工具来创建一个包含systemd进程的容器。这个工具可以让你在容器内部运行systemd进程,从而可以使用systemctl命令。以下是一个使用systemd-nspawn创建包含systemd进程的容器的例子:
```shell
systemd-nspawn -D /path/to/container/root --capability=CAP_SYS_ADMIN
```
在这个例子中,/path/to/container/root是容器的根目录,--capability=CAP_SYS_ADMIN参数允许你在容器内部运行systemd进程。