You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何永久解除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的限制:

  1. 编辑Docker的AppArmor本地规则文件:
    sudo nano /etc/apparmor.d/local/docker-default
    
  2. 添加以下内容:
    /usr/sbin/mysqld rm,
    
  3. 重新加载AppArmor规则:
    sudo apparmor_parser -r /etc/apparmor.d/docker-default
    
  4. 重启MariaDB服务:
    sudo systemctl restart mariadb
    

方法2:指定MariaDB服务使用自身AppArmor配置

通过systemd配置强制MariaDB使用专属规则,避免被docker-default覆盖:

  1. 创建或编辑MariaDB服务的override配置文件:
    sudo nano /etc/systemd/system/mariadb.service.d/override.conf
    
  2. 添加以下内容:
    [Service]
    AppArmorProfile=/etc/apparmor.d/usr.sbin.mysqld
    
  3. 重新加载systemd配置并重启服务:
    sudo systemctl daemon-reload
    sudo systemctl restart mariadb
    

方法3:将mysqld的AppArmor规则设为宽容模式

若无需严格限制mysqld,可将其规则改为仅记录行为、不阻止操作的宽容模式:

  1. 编辑mysqld的AppArmor配置文件:
    sudo nano /etc/apparmor.d/usr.sbin.mysqld
    
  2. 修改头部的profile定义,添加flags=(complain):
    profile usr.sbin.mysqld flags=(complain) {
        # 原有规则内容...
    }
    
  3. 重新加载规则并重启服务:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:35:21