如何永久解除docker-default AppArmor配置对MariaDB/mysqld的阻止?
永久解决Docker AppArmor阻止MariaDB运行的问题
问题背景
从MySQL迁移至MariaDB后,因系统安装了Docker(暂不使用但需保留),AppArmor的docker-default规则错误地对/usr/sbin/mysqld启用了强制限制,导致Apache部署的项目出现数据库连接错误:
SQLSTATE[HY000] [2002] No such file or directory
执行aa-status可确认问题根源:
4 processes are in enforce mode. ... /usr/sbin/mysqld (2960) docker-default
临时解决方案(重启后失效)
执行以下命令临时解除限制并重启MariaDB:
sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld && sudo systemctl restart mariadb
永久解决方法
方法1:修改docker-default规则排除mysqld
此方法不影响Docker其他功能,仅解除对mysqld的限制:
- 编辑Docker的AppArmor本地规则文件:
sudo nano /etc/apparmor.d/local/docker-default - 添加以下内容:
/usr/sbin/mysqld rm, - 重新加载AppArmor规则:
sudo apparmor_parser -r /etc/apparmor.d/docker-default - 重启MariaDB服务:
sudo systemctl restart mariadb
方法2:指定MariaDB服务使用自身AppArmor配置
通过systemd配置强制MariaDB使用专属规则,避免被docker-default覆盖:
- 创建或编辑MariaDB服务的override配置文件:
sudo nano /etc/systemd/system/mariadb.service.d/override.conf - 添加以下内容:
[Service] AppArmorProfile=/etc/apparmor.d/usr.sbin.mysqld - 重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart mariadb
方法3:将mysqld的AppArmor规则设为宽容模式
若无需严格限制mysqld,可将其规则改为仅记录行为、不阻止操作的宽容模式:
- 编辑mysqld的AppArmor配置文件:
sudo nano /etc/apparmor.d/usr.sbin.mysqld - 修改头部的profile定义,添加
flags=(complain):profile usr.sbin.mysqld flags=(complain) { # 原有规则内容... } - 重新加载规则并重启服务:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld sudo systemctl restart mariadb
验证
执行aa-status命令,确认/usr/sbin/mysqld不再出现在docker-default的enforce模式进程列表中,即可验证配置生效。
内容的提问来源于stack exchange,提问作者sylbru
相关产品推荐
相关产品推荐

