docker@docker:dind-rootless镜像

🔹 1.docker:dind 是什么?

  • 全称是 Docker-in-Docker
  • 作用:在容器中运行 Docker 守护进程 (dockerd),从而在容器内运行其他容器
  • 常用于 CI/CD 流水线(如 GitLab CI)中,便于在容器中构建、运行其他容器

🔸 2.docker:dind-rootless 是什么?

  • docker:dindRootless 版本
  • 在容器中运行 Docker 守护进程,但不是以 root 身份运行
  • 提供了更高的安全性,适用于受限环境(如 Kubernetes、CI 共享 runner)

✅ 3.特点

特性 描述
🔐 更安全 dockerd 和容器运行在非 root 用户下,减少宿主机暴露面
🔁 支持 Docker-in-Docker 可在容器中运行 Docker 容器,适用于 CI 构建等场景
⚠️ 受限端口 无法直接绑定 <1024 的端口,如 80、443(除非配置权限)
📦 镜像来源 Docker Hub: docker:dind-rootless(是官方镜像的 tag)

🚀 4.示例用法

1
2
docker run --privileged --name dind-rootless -d \
docker:dind-rootless

然后可以进入容器使用 docker 命令:

1
2
3
4
docker exec -it dind-rootless sh
export DOCKER_HOST=unix:///run/user/1000/docker.sock && docker ps

docker ps # 查看容器列表

注意:

  • --privileged 可能仍需要(为了解决用户命名空间或文件系统挂载问题)
  • 要使用 docker 命令,需要设置环境变量 DOCKER_HOST

必须设置,docker.socket在非默认路径下


🧩 5.和普通 dind 的区别

对比项 docker:dind docker:dind-rootless
是否需要 root 否(内部以非 root 用户运行)
安全性 较低 更高
使用复杂度 较低 稍高(可能需要更多配置)
是否能绑定 80/443 端口 否(除非配置特权)

如果你打算在 Kubernetes 中以非特权模式部署 CI 任务,或者在 安全性要求较高的环境下使用 Docker-in-Dockerdocker:dind-rootless 是非常合适的选择。