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

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,在安装依赖阶段添加以下内容:
    # 用busybox的make替代
    RUN apk add --no-cache busybox-suid && ln -sf /bin/busybox /usr/bin/make
    
    或改用gmake:
    RUN 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:20:21