通常情况下,不建议也不推荐在一台机器上安装两个版本的 Docker,而且大多数操作系统(如 Linux、macOS)的包管理机制也不允许同时安装多个版本的 Docker Engine。
不过,根据你的具体需求和使用方式,有以下几种情况可以实现“多版本 Docker”的使用:
✅ 情况一:使用容器化方式运行多个 Docker 版本(推荐)
你可以通过 Docker in Docker (DinD) 或 Podman + rootless Docker 的方式,在容器中运行不同版本的 Docker daemon。
示例:
# 启动一个包含旧版 Docker 的容器
docker run -d --name docker-19.03
-v /var/run/docker.sock:/var/run/docker.sock
-v docker-data:/var/lib/docker
docker:19.03-dind dockerd
# 启动一个包含新版 Docker 的容器
docker run -d --name docker-24.0
-v /var/run/docker.sock:/var/run/docker.sock
-v docker-data-new:/var/lib/docker
docker:24.0-dind dockerd
注意:这种方式主要用于 CI/CD 测试不同 Docker 版本的行为,而不是日常使用。
✅ 情况二:使用不同的安装方式(不推荐)
你可以在系统上卸载一个版本,再安装另一个版本。比如:
- 使用官方
.deb包安装 Docker - 使用 snap 安装 Docker(Ubuntu 上)
但这样容易导致冲突,管理困难,不推荐生产环境使用。
✅ 情况三:使用工具管理多个 Docker 环境
一些工具可以帮助你在不同环境中切换 Docker 版本,例如:
- Docker Desktop(macOS / Windows):可以方便地切换或管理多个容器环境。
- 使用 虚拟机(VM)或容器:每个 VM 装一个 Docker 版本,实现隔离。
- 使用 LXC/LXD 或 Podman 模拟多环境。
❌ 为什么不能直接装两个 Docker?
- 端口冲突:Docker daemon 默认监听
/var/run/docker.sock和 TCP 端口(如 2375/2376),多个 daemon 会冲突。 - 资源竞争:镜像、容器、网络、存储驱动等共享资源,容易导致数据损坏。
- 包管理限制:
apt、yum、dnf等不允许同时安装多个版本的docker-ce包。
🔧 替代方案建议
如果你需要测试多个 Docker 版本,推荐:
- 使用虚拟机(如 VirtualBox、VMware、Multipass)
- 使用云主机(AWS、GCP 创建不同环境)
- 使用容器运行 DinD(Docker-in-Docker)
- 使用
docker context切换远程 Docker daemon
总结
| 方法 | 是否可行 | 说明 |
|---|---|---|
| 同时安装两个 Docker 包 | ❌ 不可行 | 包冲突,不支持 |
| 使用 DinD 容器运行多版本 | ✅ 可行 | 适合测试 |
| 使用多个虚拟机 | ✅ 推荐 | 隔离性好 |
| 使用 Docker Desktop 多环境 | ✅ 可行 | 仅限桌面系统 |
✅ 最佳实践:不要在同一系统上安装多个 Docker 引擎,而是通过隔离环境(容器、VM)来实现多版本需求。
如果你能说明具体用途(如开发、测试、CI/CD),我可以给出更具体的建议。
ECLOUD博客