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

Windows下Ubuntu容器重启Docker报chroot、socket资源忙问题

问题根因

所有报错的核心是架构逻辑错误:你通过挂载宿主机/var/run/docker.sock的方式在Ubuntu容器内操作Docker,本质是调用宿主机的Docker服务,而容器本身是轻量隔离运行环境,并非完整独立操作系统,无法支持你安装NVIDIA Container Toolkit后重启Docker服务的操作:

  • 出现Running in chroot, ignoring command报错,是因为常规容器默认不启动systemd init进程,不支持通过systemctl命令管理服务,即使添加--pid host、特权模式参数也无法解决该基础环境限制
  • 出现can't create unix socket /var/run/docker.sock: device or resource busy报错,是因为你启动容器时已经将宿主机的docker.sock挂载到容器内同路径,该套接字被挂载点占用,容器内启动dockerd进程时无法绑定该路径,导致服务启动失败
  • 尝试/etc/init.d/docker start启动无效、执行exit退出chroot无效,本质是你始终处于容器隔离环境内,没有独立的系统服务管理权限,既无法在容器内正常运行systemd管理的Docker服务,也无法操作重启宿主机上的Docker服务,你在容器内安装的NVIDIA Container Toolkit也无法生效到宿主机的Docker runtime上。

对应Docker日志截图:
Docker运行错误日志

标准解决方案

你不需要在Ubuntu容器内嵌套安装Docker来启用GPU支持,Windows环境运行GPU加速的Ubuntu容器正确流程如下:

  • 在Windows宿主机安装对应型号的NVIDIA官方显卡驱动,开启WSL2的GPU透传能力
  • 打开Docker Desktop设置,确认已启用WSL2集成,GPU支持会随WSL2集成自动生效,无需在容器内单独安装NVIDIA Container Toolkit
  • 直接启动带GPU权限的Ubuntu容器即可,启动命令参考:
docker run --gpus all -ti ubuntu
  • 进入容器后执行nvidia-smi,若能正常输出显卡型号、显存、驱动版本信息,即代表GPU支持已正常启用。
嵌套Docker场景方案

如果有Docker in Docker强需求,必须在外层Ubuntu容器内再启动GPU容器,不要使用挂载宿主机docker.sock的方案,按以下步骤操作:

  • 启动外层容器时不要挂载宿主机/var/run/docker.sock路径,同时添加GPU透传、特权参数:
docker run --gpus all --privileged -ti ubuntu
  • 进入外层容器后正常安装Docker环境、NVIDIA Container Toolkit,安装完成后无需执行systemctl相关命令,直接指定独立套接字路径启动容器内的dockerd进程,避免和宿主机路径冲突:
dockerd -H unix:///var/run/docker-inner.sock &
  • 后续启动内层容器时,通过指定的独立套接字操作Docker即可,GPU能力会通过外层容器自动透传到内层容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:01:13