启用docker rootless模式后,必须配置xdg_runtime_dir、path和docker_host三个环境变量,才能使docker命令正常连接用户专属守护进程;否则将因无法访问socket而报错。
普通用户启用 docker rootless 模式后,docker 命令本身不会自动可用,因为 rootless 版本的 docker 客户端和守护进程(dockerd-rootless.sh)默认安装在用户家目录下的 ~/bin/,且通信 socket 也不在系统默认路径。必须手动配置环境变量,才能让 docker 命令正常连接到用户自己的守护进程。
必须设置的三个核心环境变量
Rootless 模式依赖以下三项环境变量协同工作,缺一不可:
-
XDG_RUNTIME_DIR:指定运行时目录(用于存放docker.sock)。必须是用户可写、非 tmpfs 的本地路径,常见设为/home/用户名/.docker/run或/run/user/$(id -u)(后者需系统支持 logind) -
PATH:把 Rootless 安装生成的~/bin加入路径,使docker、dockerd-rootless.sh等命令可直接调用 -
DOCKER_HOST:显式指向用户专属 socket 地址,例如unix:///home/用户名/.docker/run/docker.sock。不设此项时,客户端会默认尝试连接系统级/var/run/docker.sock,导致“connection refused”错误
将环境变量持久化到用户 Shell
以 Bash 为例,推荐写入 ~/.bashrc(Zsh 用户对应 ~/.zshrc):
echo 'export XDG_RUNTIME_DIR=$HOME/.docker/run' >> ~/.bashrc echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc echo 'export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock' >> ~/.bashrc source ~/.bashrc
注意:$XDG_RUNTIME_DIR 在 DOCKER_HOST 中可直接展开,比硬编码路径更灵活;执行 source 后当前终端立即生效。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
验证环境变量是否生效
运行以下命令检查关键变量值和连通性:
-
echo $XDG_RUNTIME_DIR→ 应输出类似/home/u/.docker/run -
which docker→ 应返回/home/u/bin/docker(不是/usr/bin/docker) -
docker info --format '{{.ServerVersion}} {{.SecurityOptions}}'→ 成功返回版本号及[name=userns]表示 Rootless 正常运行
常见问题与修复提示
若仍提示 “Cannot connect to the Docker daemon”,请按顺序排查:
- 确认
XDG_RUNTIME_DIR目录已创建且权限正确:mkdir -p $XDG_RUNTIME_DIR && chmod 700 $XDG_RUNTIME_DIR - 检查
dockerd-rootless.sh是否正在运行:ps aux | grep dockerd-rootless;未运行则手动启动:systemctl --user start docker(支持 systemd 的系统)或dockerd-rootless.sh &(CentOS 7 等) - 确认
~/.docker/run/docker.sock文件存在且属主为当前用户:ls -l $XDG_RUNTIME_DIR/docker.sock










