Docker - 离线+无root环境安装 docker-rootless
Docker - 离线+无root环境安装 docker-rootless
系统:麒麟v10 Linux | 架构:arm64 | 权限:无root
一. 下载 Docker 静态二进制包
下面这二个都要下载:
- docker-rootless: docker-rootless-extras-28.3.3.tgz
- docker: docker-28.3.3.tgz
二. 部署
在服务器上执行以下操作:
- 把下载好的文件复制到
/data/wtoolsdocker-rootless-extras-28.3.3.tgzdocker-28.3.3.tgz
- 解压:
tar -xzvf /data/wtools/docker-rootless-extras-28.3.3.tgz -C /data/winstall - 配置:
cd /data/winstall mv docker-rootless-extras docker tar -xzvf /data/wtools/docker-28.3.3.tgz which newuidmap newgidmap - 设置环境变量:
echo 'export PATH="/data/winstall/docker:$PATH"' >> ~/.bashrc echo 'export DOCKER_HOST=unix:///data/winstall/docker/runtime/docker.sock' >> ~/.bashrc source ~/.bashrc
三. 生成脚本
1) 启动脚本
#!/bin/bash
# 基础路径
DOCKER_HOME=/data/winstall/docker
# 环境变量(固定死,免得每次都 export)
export PATH=$DOCKER_HOME:$PATH
export XDG_RUNTIME_DIR=$DOCKER_HOME/runtime
export DOCKERD_ROOTLESS_ROOT=$DOCKER_HOME/rootless
export DOCKER_HOST=unix://$DOCKERD_ROOTLESS_ROOT/docker.sock
mkdir -p $XDG_RUNTIME_DIR $DOCKERD_ROOTLESS_ROOT $DOCKER_HOME/data
# 后台启动并写日志
nohup $DOCKER_HOME/dockerd-rootless.sh --data-root=$DOCKER_HOME/data > $DOCKER_HOME/docker.log 2>&1 &
echo $! > $DOCKER_HOME/docker.pid
echo "Rootless Docker started, PID=$(cat $DOCKER_HOME/docker.pid)"
2) 停止脚本
#!/bin/bash
DOCKER_HOME=/data/winstall/docker
PID_FILE=$DOCKER_HOME/docker.pid
if [ ! -f "$PID_FILE" ]; then
echo "❌ No PID file found at $PID_FILE. Is Docker running?"
exit 1
fi
PID=$(cat $PID_FILE)
if ps -p $PID > /dev/null 2>&1; then
echo "Stopping Rootless Docker (PID=$PID)..."
kill $PID
sleep 2
if ps -p $PID > /dev/null 2>&1; then
echo "Process still running, force killing..."
kill -9 $PID
fi
rm -f $PID_FILE
echo "✅ Rootless Docker stopped."
else
echo "⚠️ No process found with PID=$PID. Removing stale PID file."
rm -f $PID_FILE
fi
四. 设置权限
- 脚本权限:
chmod +x /data/winstall/docker/start-docker.sh chmod +x /data/winstall/docker/stop-docker.sh - 管理员权限(需要root):
su - root echo "tailweb:100000:65536" | tee -a /etc/subuid echo "tailweb:100000:65536" | tee -a /etc/subgid exit
五. 启动
▶ 启动: /data/winstall/docker/start-docker.sh
⏹ 停止: /data/winstall/docker/stop-docker.sh
六. 切换网络驱动
docker-rootless 默认使用 vpnkit 网络驱动,该驱动会随运行时间持续占用内存。推荐替换为 slirp4netns,降低资源开销。
📊 三大网络驱动对比
🚀 吞吐量:
pasta(最优,高带宽场景)> slirp4netns(中等)> vpnkit(略低)
⏱ 网络延迟:
pasta(最低)< slirp4netns(适中)< vpnkit(略高)
💾 资源占用:
slirp4netns(最小,CPU/内存最优)< pasta(适中)< vpnkit(偏高)
查看 Linux 当前内存占用最高的进程
ps -eo pid,user,comm,%mem,rss --sort=-rss | head -20

1. 下载部署 slirp4netns
ARM64 架构下载地址:https://github.com/rootless-containers/slirp4netns/releases
本次选用版本:v1.3.4,下载文件 slirp4netns-aarch64,并重命名为 slirp4netns。
将文件上传至目录:/data/winstall/docker/
添加执行权限:
chmod +x /data/winstall/docker/slirp4netns
版本校验:
/data/winstall/docker/slirp4netns --version
正常输出参考:
slirp4netns version 1.3.4
commit: 129916bd8dc2b8eaf621671b3431799c827d689e
libslirp: 4.9.2
SLIRP_CONFIG_VERSION_MAX: 6
libseccomp: 2.5.3
检查文件路径:
which slirp4netns
预期返回:
/data/winstall/docker/slirp4netns
2. 修改启动脚本切换驱动
先停止当前运行的 Docker:
/data/winstall/docker/stop-docker.sh
编辑启动脚本 /data/winstall/docker/start-docker.sh,新增网络驱动环境变量,完整内容如下:
#!/bin/bash
DOCKER_HOME=/data/winstall/docker
export PATH=$DOCKER_HOME:$PATH
export XDG_RUNTIME_DIR=$DOCKER_HOME/runtime
export DOCKERD_ROOTLESS_ROOT=$DOCKER_HOME/rootless
export DOCKER_HOST=unix://$DOCKERD_ROOTLESS_ROOT/docker.sock
# 指定使用 slirp4netns 网络驱动
export DOCKERD_ROOTLESS_ROOTLESSKIT_NET=slirp4netns
mkdir -p "$XDG_RUNTIME_DIR"
mkdir -p "$DOCKERD_ROOTLESS_ROOT"
mkdir -p "$DOCKER_HOME/data"
echo "Using network driver: slirp4netns"
nohup "$DOCKER_HOME/dockerd-rootless.sh" --data-root="$DOCKER_HOME/data" > "$DOCKER_HOME/docker.log" 2>&1 &
echo $! > "$DOCKER_HOME/docker.pid"
sleep 3
echo "Rootless Docker started, PID=$(cat "$DOCKER_HOME/docker.pid")"
3. 重启并验证配置
重新启动 Docker:
/data/winstall/docker/start-docker.sh
启动日志参考:
Using network driver: slirp4netns
Rootless Docker started, PID=3785812
Rootless Docker started, PID=3785812
查看进程确认驱动生效:
ps -ef | grep rootlesskit | grep -v grep
进程输出参考:
tailweb 3785812 1 0 15:02 pts/0 00:00:00 rootlesskit --state-dir=/data/winstall/docker/runtime/dockerd-rootless --net=slirp4netns --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /data/winstall/docker/dockerd-rootless.sh --data-root=/data/winstall/docker/data
✅ 若进程中包含 --net=slirp4netns,说明网络驱动切换成功。
end.

浙公网安备 33010602011771号