
























系统:麒麟v10 Linux | 架构:arm64 | 权限:无root
下面这二个都要下载:
在服务器上执行以下操作:
/data/wtools
docker-rootless-extras-28.3.3.tgzdocker-28.3.3.tgztar -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
#!/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)"
#!/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
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(偏高)
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
先停止当前运行的 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")"
重新启动 Docker:
/data/winstall/docker/start-docker.sh
启动日志参考:
Using network driver: slirp4netns
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.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。