同一机器上同时运行Rootless与Rootful Docker实例可行吗?
同一服务器同时运行Rootful与Rootless Docker的可行性
可以在同一服务器上让Rootful和Rootless Docker独立运行,官方文档的卸载/禁用建议主要是为了降低初学者的配置复杂度,实际通过配置隔离即可实现二者共存。
核心配置要点
端口与Socket隔离
Rootful Docker默认监听/var/run/docker.sock(Unix套接字)或2375/2376端口,Rootless Docker需使用独立的套接字和端口:- 编辑低权限用户的
~/.config/docker/daemon.json,指定独立的监听地址,例如:
(将{ "hosts": ["unix:///run/user/1000/docker.sock", "tcp://127.0.0.1:2377"] }1000替换为实际用户UID,2377替换为未被占用的端口)
- 编辑低权限用户的
环境变量区分
低权限用户使用Rootless Docker时,需设置环境变量指向自己的套接字,避免调用Rootful的Daemon:export DOCKER_HOST=unix:///run/user/1000/docker.sock可将此命令加入用户的
~/.bashrc或~/.zshrc实现永久生效。存储与资源隔离
- Rootless Docker的镜像、容器数据默认存储在用户目录
~/.local/share/docker,与Rootful的/var/lib/docker完全独立,不会互相干扰。 - Rootless Docker受用户级资源限制(如ulimits、cgroup),可通过修改用户的
/etc/security/limits.conf或配置用户级systemd服务调整,不影响Rootful Docker的资源使用。
- Rootless Docker的镜像、容器数据默认存储在用户目录
注意事项
- 严格禁止低权限用户获取Rootful Docker套接字(
/var/run/docker.sock)的访问权限,否则会导致用户权限提升至root,违背Rootless模式的安全初衷。 - Rootless模式本身不支持部分特权操作(如
--privileged参数、挂载host的特权路径),此类场景仍需使用Rootful Docker,这是Rootless的固有限制,与二者共存无关。 - 启动方式区分:Rootful Docker使用系统级systemd服务(
docker.service),Rootless Docker需配置用户级systemd服务(通过dockerd-rootless-setuptool.sh install完成配置后启动)。
内容的提问来源于stack exchange,提问作者user23464825
相关产品推荐
相关产品推荐

