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

从容器内部如何判断Docker daemon是否运行在rootless模式

容器内部判断Docker daemon是否运行在rootless模式的方案

前置说明

Docker 20.10及以上版本开始支持rootless模式运行daemon,常规在宿主机判断的方法是执行docker info查看Security Options下是否存在rootless标识,容器内部的判断逻辑可以基于相同的原理扩展,且满足不依赖用户命名空间检测的要求。

方案1:容器内可访问Docker Socket(准确率100%,优先推荐)

该方案与宿主机判断逻辑完全一致,不涉及任何用户命名空间相关的检测:

  • 前提条件:容器启动时挂载了Docker Socket /var/run/docker.sock
  • 执行逻辑:调用Docker API查询daemon的安全配置项,判断是否包含rootless标识
  • 示例脚本:
#!/bin/bash
# 检查docker命令是否存在
if ! command -v docker &> /dev/null; then
  echo "未检测到docker cli,请先安装或直接调用socket接口查询"
  exit 2
fi

# 查询安全选项判断是否为rootless模式
if docker info --format '{{.SecurityOptions}}' | grep -Fq 'rootless'; then
  echo "当前Docker daemon运行在rootless模式"
  exit 0
else
  echo "当前Docker daemon未运行在rootless模式"
  exit 1
fi

方案2:容器内无法访问Docker Socket

该方案通过cgroup路径特征判断,完全不涉及用户命名空间检测逻辑:
rootless模式下运行的Docker daemon,创建的容器cgroup路径中必然包含运行daemon的普通用户的UID段,格式为user-<非0数字UID>.slice/user@<非0数字UID>.service,而rootful模式的Docker创建的容器不会存在该特征。

  • 示例脚本:
#!/bin/bash
if grep -Eq 'user-[1-9][0-9]*\.slice/user@[1-9][0-9]*\.service' /proc/self/cgroup; then
  echo "当前Docker daemon运行在rootless模式"
  exit 0
else
  echo "当前Docker daemon未运行在rootless模式"
  exit 1
fi

提示:该方案准确率略低于方案1,仅适用于无法挂载Docker Socket的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:18:02