不建议在一台机器上共存多个Docker daemon版本,因其会导致二进制冲突、socket占用、systemd服务名重复等问题;真正需求是通过单个dockerd运行多版本应用环境(如node:16/node:20)、多版本CLI工具(独立二进制管理)或采用虚拟机/rootless模式实现物理隔离。

不建议、也不推荐在一台机器上共存多个 Docker daemon 版本。
Docker daemon(dockerd)是系统级服务,同一时刻只能运行一个实例;强行安装多个版本会引发二进制冲突、socket 占用、systemd 服务名重复、配置覆盖等问题,极易导致 docker version 报错、容器无法启动、网络异常甚至系统不稳定。你看到的“多 Docker 版本共存”需求,绝大多数实际场景下属于概念混淆——真正需要的不是多个 daemon,而是:
- ✅ 多个不同版本的 应用运行时环境(如 Node.js、Python、PHP、CUDA)
- ✅ 多个不同版本的 镜像或容器 并行运行
- ✅ 多个不同版本的 CLI 工具(如
docker命令)用于对接远程或测试用
下面分三类讲清楚怎么做、为什么这么做更安全可靠:
一、用单个 Docker daemon 运行多版本应用环境(推荐主流做法)
这是最标准、最稳定、生产环境普遍采用的方式:
- 所有版本都跑在同一个
dockerd上,靠镜像标签隔离(如node:16/node:20、python:3.9/python:3.12、php:7.4-fpm/php:8.2-apache) - 通过
docker run或docker-compose.yml指定镜像,启动即用,互不干扰 - 无需修改宿主机环境,无 PATH 冲突,无全局依赖污染
例如:
# 同时跑两个 Node 版本的服务 docker run -d --name api-v1 -p 3001:3000 node:16-alpine npm start docker run -d --name api-v2 -p 3002:3000 node:20-slim npm start # 同时跑 Python 3.9 和 3.12 的脚本 docker run --rm -v $(pwd):/work python:3.9 python /work/test.py docker run --rm -v $(pwd):/work python:3.12 python /work/test.py
二、需要多个 Docker CLI 版本?用 wrapper 或独立二进制管理
如果你确实要测试不同 docker 命令行工具(比如 CI 中验证旧版 CLI 兼容性),可这样做:
- 下载对应版本的静态
docker二进制(download.docker.com →docker-x.xx.x.tgz) - 解压后重命名并放入独立目录,例如:
wget https://www.php.cn/link/c10f93a31d34d34b419ebb34a227d350linux/static/stable/x86_64/docker-24.0.7.tgz tar -xzf docker-24.0.7.tgz && mv docker/docker docker-cli-24.0.7 wget https://www.php.cn/link/c10f93a31d34d34b419ebb34a227d350linux/static/stable/x86_64/docker-20.10.24.tgz tar -xzf docker-20.10.24.tgz && mv docker/docker docker-cli-20.10.24
- 使用时显式调用:
./docker-cli-20.10.24 version ./docker-cli-24.0.7 build -t app .
- ⚠️ 注意:它们都连接同一个本地
dockerd(默认/var/run/docker.sock),不是“多个 daemon”。
三、真要隔离 daemon?用虚拟机或 rootless 模式替代
若因合规、安全审计或极端兼容性要求,必须物理隔离 Docker 运行时:
- ✅ 启动轻量虚拟机(如 Multipass、UTM、LXC)→ 每台装独立 Docker daemon
- ✅ 使用 Rootless Docker(无需 root 权限,用户级 daemon)→ 可与系统 daemon 共存
# 安装 rootlesskit + dockerd-rootless.sh dockerd-rootless.sh --experimental & export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock docker version # 此时用的是用户级 daemon
- ❌ 不要用
apt install docker-ce=xx多次覆盖安装,会导致包管理器混乱、systemd 单元冲突、/etc/docker/daemon.json被覆盖等严重问题。
本质上,Docker 的设计哲学就是「一个 daemon,无限镜像」。把版本差异下沉到镜像层,才是简洁、可复现、易运维的正解。


















