如何为Docker守护进程应用AppArmor配置文件及解决go安装报错
Docker守护进程侧AppArmor配置应用方案
报错根因说明
- 路径结构不匹配:执行go install时使用了GitHub网页的访问路径作为Go包安装路径,路径中包含的
blob/master是网页浏览的专属路径标识,并非仓库实际目录结构的一部分。Go拉取模块时会按照仓库根目录的相对路径定位包,插入该路径段会让Go尝试寻找不存在的blob目录,自然无法定位到实际存在的contrib/apparmor包,直接触发“模块内不存在对应包”的报错。 - 版本匹配异常:moby仓库的模块版本在v2迭代后需要匹配模块路径的版本声明,直接拉取官方最新标签会命中带
+incompatible标记的旧版本代码,无法对应master分支下的最新代码结构,进一步放大路径定位的错误。
可落地操作步骤
1. 前置环境准备
- 安装不低于1.18版本的Go语言环境,开启模块模式支持分支指定安装
- 确认系统已激活AppArmor内核模块,当前操作具备root权限
2. 编译官方AppArmor配置生成程序
- 移除错误路径中的冗余网页标识段,将原路径中
blob/master部分删除,得到Go模块可识别的有效包路径:github.com/moby/moby/contrib/apparmor - 执行正确的安装命令,指定拉取master分支下的对应代码:
go install github.com/moby/moby/contrib/apparmor@master
该命令会自动跳过模块版本标签校验,直接拉取master分支下对应路径的代码,编译生成可执行文件,存放在Go环境指定的bin目录下
3. 生成并加载内核侧AppArmor规则
- 运行编译完成的可执行文件,输出Docker守护进程对应的AppArmor规则文本,重定向写入AppArmor规则存储目录:
$(go env GOPATH)/bin/apparmor > /etc/apparmor.d/docker - 调用AppArmor解析工具,将新生成的规则加载到内核强制生效列表中:
apparmor_parser -r /etc/apparmor.d/docker
4. 绑定规则到Docker守护进程
- 修改Docker守护进程的systemd服务配置文件,在dockerd启动参数中追加AppArmor规则绑定参数:
--apparmor-profile=docker-default - 重载系统服务配置,重启Docker守护进程使绑定关系生效:
systemctl daemon-reload && systemctl restart docker
5. 生效状态验证
- 查看dockerd进程的安全上下文信息,确认输出中已标注绑定的AppArmor profile名称,即代表配置生效
内容的提问来源于stack exchange,提问作者TheDiveO
相关产品推荐
相关产品推荐

