通常情况下,不建议也不支持在一台服务器上同时安装并运行两个 Docker 引擎(Docker Daemon)实例。原因如下:
1. Docker 是系统级服务
Docker 是一个运行在操作系统上的守护进程(dockerd),它管理容器、镜像、网络和存储卷等资源。它需要独占某些系统资源(如 containerd、runc、cgroup、命名空间等)。如果尝试运行两个 Docker 守护进程,会导致:
- 端口冲突(默认使用
2375、2376等) - 资源竞争(如
/var/lib/docker目录被多个实例同时访问) - 容器运行时冲突(
containerd只能被一个dockerd使用)
2. 实际场景:为什么有人想装两个 Docker?
常见需求包括:
- 隔离开发/测试/生产环境
- 运行不同版本的 Docker
- 多租户场景
但这些需求不需要安装两个 Docker 引擎,可以通过以下方式实现:
✅ 推荐替代方案
✅ 方案 1:使用 Docker Compose 或 命名空间隔离
使用不同的项目目录和 docker-compose.yml 文件来隔离服务。
# 项目 A
cd /opt/project-a && docker-compose up
# 项目 B
cd /opt/project-b && docker-compose up
Docker 本身支持多个容器共存,无需多个引擎。
✅ 方案 2:使用 rootless Docker
可以运行一个普通用户权限的 Docker 实例,与系统级 Docker 并存。
# 安装 rootless Docker
curl -fsSL https://get.docker.com/rootless | sh
这会在用户空间运行一个独立的 dockerd,监听在非特权端口,不会与系统 Docker 冲突。
参考:https://docs.docker.com/engine/security/rootless/
✅ 方案 3:使用 不同的容器运行时
如果你需要多种容器环境,可以:
- 使用 Docker + Podman(Podman 不需要守护进程,可与 Docker 共存)
- 使用 Docker + LXC/LXD
# Podman 和 Docker 可以同时安装
sudo apt install podman
podman run hello-world
✅ 方案 4:使用虚拟机或容器嵌套(DinD)
如果确实需要多个独立的 Docker 环境,可以:
- 在 Docker 容器中运行 Docker(Docker-in-Docker,用于 CI/CD)
- 使用虚拟机(如 KVM、VMware)运行多个独立的 Docker 主机
# 示例:Docker in Docker
docker run --privileged docker:dind
⚠️ 注意:DinD 不适合生产部署,仅用于临时环境。
❌ 不能做什么?
- 不能同时运行两个
dockerd守护进程(除非使用 rootless 或不同用户) - 不能共享
/var/lib/docker存储目录 - 不能绑定相同的 API 端口(如 2375)
总结
| 问题 | 回答 |
|---|---|
| 能否安装两个 Docker? | 可以安装,但不能同时运行两个守护进程 |
| 能否运行两个 Docker 实例? | 仅通过 rootless 模式 或 不同用户 实现 |
| 推荐做法? | 使用单个 Docker + 多容器隔离,或使用 Podman、VM 等替代方案 |
如果你说明具体使用场景(比如:想隔离环境、测试新版本 Docker 等),我可以给出更具体的建议。
CLOUD技术博