Windows Docker Desktop构建Alpine3.17容器时cmake执行make报错的解决
解决Alpine 3.17容器构建时
make: Operation not permitted问题 以下是几种无需降级Alpine版本的解决方案,适用于Docker Desktop for Windows环境:
1. 切换到WSL2后端(推荐)
WSL1不支持faccessat2系统调用,WSL2基于完整Linux内核可天然适配:
- 打开Docker Desktop设置,进入Resources > WSL Integration
- 确认已启用WSL2后端;若当前使用WSL1,需先在PowerShell执行
wsl --set-version <你的发行版名称> 2(例如wsl --set-version Ubuntu-22.04 2)将发行版转为WSL2 - 重启Docker Desktop后重新执行构建
2. 自定义seccomp配置绕过faccessat2检查
若无法切换到WSL2,可通过seccomp配置屏蔽该系统调用:
- 创建
seccomp.json文件,内容如下:{ "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [ { "name": "faccessat2", "action": "SCMP_ACT_ERRNO", "args": null, "comment": "", "includes": {}, "excludes": {} } ] } - 打开Docker Desktop设置的Docker Engine页面,添加配置项
"seccomp-profile": "./seccomp.json"(确保文件路径正确),点击Apply & Restart - 重新执行容器构建命令
3. 在Dockerfile中替换make工具
通过安装替代工具绕过原make的权限问题:
- 修改Dockerfile,在安装依赖阶段添加以下内容:
或改用gmake:# 用busybox的make替代 RUN apk add --no-cache busybox-suid && ln -sf /bin/busybox /usr/bin/makeRUN apk add --no-cache gmake && ln -sf /usr/bin/gmake /usr/bin/make - 之后再执行
cmake和make命令
4. 更新Docker Desktop到最新版本
旧版本Docker Desktop对WSL2的兼容性存在bug,更新到最新版本可修复部分系统调用适配问题:
- 打开Docker Desktop,进入Settings > Software Updates
- 检查并安装最新版本,重启后重新构建容器
内容的提问来源于stack exchange,提问作者kenba
相关产品推荐
相关产品推荐

