You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Debian 8升级至Debian 9后Docker seccomp报错求助

解决Debian 9下Docker Build/Run的Seccomp过滤错误

问题分析

从你的描述和docker info输出来看,核心问题出在内核版本不匹配:你当前使用的是Debian 8的3.16.0-7-amd64内核,升级到Debian 9后没有同步更新内核。而Docker 18.09的默认seccomp profile包含了该旧内核不支持的系统调用(比如clone3),导致加载过滤规则时触发invalid argument错误。虽然docker run可以通过--seccomp=unconfined临时绕过,但docker build不支持该参数,之前修改daemon.json失败大概率是因为配置的profile与内核不兼容。

解决方案

1. 升级内核到Debian 9官方版本(推荐)

这是最彻底的解决办法,Debian 9默认提供4.9系列内核,完全支持Docker 18.09的seccomp规则:

  • 执行命令升级内核:
    sudo apt update && sudo apt install linux-image-amd64 linux-headers-amd64
    
  • 重启系统后,验证内核版本:
    uname -r
    
    输出应为4.9.x-amd64,此时再运行docker rundocker build就不会出现seccomp错误了。

2. 使用兼容旧内核的Seccomp Profile(临时过渡)

如果暂时无法重启升级内核,可以替换Docker的全局seccomp profile为适配3.16内核的版本:

  • 创建兼容的profile文件,比如/etc/docker/seccomp-3.16.json,可以使用Docker 17.06版本的默认profile(该版本对旧内核兼容性更好,移除了3.16不支持的系统调用)。
  • 修改/etc/docker/daemon.json
    {
      "seccomp-profile": "/etc/docker/seccomp-3.16.json"
    }
    
  • 重启Docker守护进程:
    sudo systemctl restart docker
    
    这次守护进程应该能正常启动,且docker build也不会再报错。

3. 全局禁用Seccomp过滤(不推荐,不安全)

如果只是临时测试场景,可以完全关闭seccomp过滤,但会降低容器安全性:

  • 修改/etc/docker/daemon.json
    {
      "seccomp-profile": "unconfined"
    }
    
  • 重启Docker:
    sudo systemctl restart docker
    
    此方法会让所有容器(包括build过程)跳过seccomp过滤,快速解决错误,但不建议在生产环境使用。

补充验证

确认内核seccomp支持正常:

grep CONFIG_SECCOMP= /boot/config-$(uname -r)

输出CONFIG_SECCOMP=y说明内核本身支持seccomp,问题仅在于profile与内核版本不匹配。

内容的提问来源于stack exchange,提问作者aljoshare

火山引擎 最新活动