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

Docker运行容器报错cannot allocate memory: unknown求助

解决Docker运行hello-world时的cgroup内存分配错误

问题现象

运行docker run hello-world时触发以下错误:

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: unable to apply cgroup configuration: mkdir /sys/fs/cgroup/memory/docker/246b9b461a8341391ad376c88ab923274c924d96c109762f06940be65ff82b17: cannot allocate memory: unknown.

服务器为Ubuntu 22.04(从20.04升级),配置4GB内存、4核CPU,资源充足(内存空闲3.7GB,磁盘使用率2%),重启服务器、Docker及重装系统后问题依旧。

解决方案

1. 切换Docker的cgroup驱动为systemd

Ubuntu 22.04默认使用systemd作为init系统,cgroupfs驱动可能存在兼容性问题:

  • 查看当前cgroup驱动:
    docker info | grep Cgroup
    
  • 编辑Docker配置文件/etc/docker/daemon.json,添加或修改内容:
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
  • 重启Docker服务:
    systemctl daemon-reload && systemctl restart docker
    
  • 再次测试运行hello-world镜像。

2. 手动挂载cgroup内存子系统

如果内存cgroup子系统未正确挂载,会导致容器创建失败:

  • 检查挂载状态:
    mount | grep cgroup
    
  • 若未找到/sys/fs/cgroup/memory的挂载记录,手动挂载:
    sudo mkdir -p /sys/fs/cgroup/memory
    sudo mount -t cgroup cgroup /sys/fs/cgroup/memory -o memory
    
  • 挂载完成后重新运行容器测试。

3. 针对OpenVZ/Virtuozzo虚拟化环境的处理

从df -h输出的ploop文件系统判断,服务器可能运行在OpenVZ/Virtuozzo环境中,这类环境默认会限制cgroup功能:

  • 编辑/etc/docker/daemon.json,调整cgroup配置:
    {
      "exec-opts": ["native.cgroupdriver=cgroupfs"],
      "default-runtime": "runc"
    }
    
  • 重启Docker后,尝试带特权参数运行测试容器(仅用于调试,生产环境禁用):
    docker run --privileged hello-world
    
  • 若仍失败,需联系主机服务商开启cgroup内存子系统支持。

4. 升级Docker到最新稳定版本

旧版Docker可能存在cgroup相关的bug,升级到最新版可解决问题:

  • 卸载现有Docker组件:
    sudo apt-get purge docker-ce docker-ce-cli containerd.io
    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd
    
  • 重新安装最新稳定版Docker:
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  • 安装完成后重启Docker并测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:00:34