本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

 Follow]([]
基于Ubuntu的Docker镜像,用于在容器内部运行Docker容器,并提供以下额外特性:
[!WARNING]
--privileged选项不安全,仅用于开发或测试目的。 安全的正确做法:[***]
docker run -it --privileged cruizba/ubuntu-dind
或使用sysbox:
docker run -it --runtime=sysbox-runc cruizba/ubuntu-dind
focal、jammy和noble)本项目的灵感来源于两个现有仓库:
有时需要在Docker容器内运行其他Docker容器,这通常需要变通解决方案,尤其是在CI/CD流水线或需要大量虚拟化的软件中。
有两种方法可以执行DinD:
此策略通过-v /var/run/docker.sock:/var/run/docker.sock共享主机系统的/var/run/docker.sock套接字。本质上,这种技术允许我们从主容器中生成由主机系统管理的容器。然而,在这些次级容器中创建的任何容器实际上只在主机系统上出现,而不在发起容器内部。这种方法通常会遇到两个主要挑战:
网络挑战:在DooD系统中,当在一个容器内实例化另一个容器时,两个容器均由主机系统管理。因此,如果从DooD容器运行一个暴露端口3306的容器,该端口对主机可见,但发起它的容器无法访问。
目录卷:假设计划在"container-2"内运行"container-1",并尝试使用卷将"container-1"的目录共享到"container-2",这将无法工作。原因在于套接字共享——我们实际上不是从主容器共享目录,而是从主机共享目录。尽管这些挑战有解决方案,但往往复杂且繁琐。
这种方法虽然安全性较低(--privileged选项绕过了许多容器化安全特性),但能够在需要时创建一个内部带有Docker的新容器,有效解决网络和卷问题。现在可以将"container-1"的文件夹共享给由其创建的"container-2",并从"container-2"暴露可被"container-1"访问的端口。
但实际上有安全运行此容器的方法。可以使用nestybox/sysbox运行时来安全地运行此容器。该运行时是一种容器运行时,支持安全且高性能的Docker-in-Docker (DinD),是--privileged选项的理想替代方案。
您可以在使用指南部分查看如何不安全或安全地运行此容器。
测试或使用此镜像非常简单,有两种选择:
要使用此Docker-in-Docker镜像,运行以下命令:
docker run -it --privileged cruizba/ubuntu-dind
如果需要systemd环境,也可以使用systemd-latest标签:
docker run -d --name ubuntu-dind --privileged cruizba/ubuntu-dind:systemd-latest docker exec -it ubuntu-dind bash
此选项需要在系统中安装Sysbox。您可以查看此处了解安装方法(遗憾的是,包安装仅适用于基于debian的发行版)。
要在更安全的环境中使用此Docker-in-Docker镜像,运行以下命令:
docker run -it --runtime=sysbox-runc cruizba/ubuntu-dind
如果需要systemd环境,也可以使用systemd-latest标签:
docker run -d --name ubuntu-dind --runtime=sysbox-runc cruizba/ubuntu-dind:systemd-latest docker exec -it ubuntu-dind bash
只需运行镜像即可获得干净的环境来测试您的Docker镜像:
docker run -it --privileged cruizba/ubuntu-dind
docker run -it --runtime=sysbox-runc cruizba/ubuntu-dind
这将在容器内启动一个root bash终端,您可以在其中运行docker命令。
可以直接运行命令来测试镜像:
docker run -it --privileged cruizba/ubuntu-dind docker run hello-world
docker run -it --runtime=sysbox-runc cruizba/ubuntu-dind docker run hello-world
您可以扩展此镜像以添加自己的工具和配置。下面创建一个示例,使用此镜像构建项目并测试,展示其扩展性和强大功能:
FROM cruizba/ubuntu-dind:latest # 安装依赖 RUN apt-get update && apt-get install git -y COPY entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/entrypoint.sh
entrypoint.sh:
#!/bin/bash # 启动docker start-docker.sh # 此处添加你的命令 git clone [***] cd ubuntu-dind || exit 1 docker build . -f ubuntu-jammy.Dockerfile -t ubuntu-dind-test docker run --privileged ubuntu-dind-test docker run hello-world
此脚本将克隆此仓库、构建镜像并从中运行容器。
需要特别注意的是,在使用docker命令前需要运行start-docker.sh脚本,该脚本将启动容器内的docker守护进程。
您可以在examples文件夹中找到此示例。
[!NOTE] 对于systemd镜像,入口点脚本不同,且不需要
start-docker.sh脚本。要在systemd镜像中执行命令,需要docker exec进入容器并运行命令。
您可以在Docker Hub找到可用镜像。也可以查看Releases部分了解可用标签:Releases
所有标签均以下列格式发布:
# 普通镜像 cruizba/ubuntu-dind:focal-<docker-version> cruizba/ubuntu-dind:jammy-<docker-version> cruizba/ubuntu-dind:noble-<docker-version> # Systemd镜像 cruizba/ubuntu-dind:focal-systemd-<docker-version> cruizba/ubuntu-dind:jammy-systemd-<docker-version> cruizba/ubuntu-dind:noble-systemd-<docker-version>
# 普通镜像 cruizba/ubuntu-dind:focal-<docker-version>-r<revision> cruizba/ubuntu-dind:jammy-<docker-version>-r<revision> cruizba/ubuntu-dind:noble-<docker-version>-r<revision> # Systemd镜像 cruizba/ubuntu-dind:focal-systemd-<docker-version>-r<revision> cruizba/ubuntu-dind:jammy-systemd-<docker-version>-r<revision> cruizba/ubuntu-dind:noble-systemd-<docker-version>-r<revision>
# 普通镜像 cruizba/ubuntu-dind:focal-latest cruizba/ubuntu-dind:jammy-latest cruizba/ubuntu-dind:noble-latest # Systemd镜像 cruizba/ubuntu-dind:focal-systemd-latest cruizba/ubuntu-dind:jammy-systemd-latest cruizba/ubuntu-dind:noble-systemd-latest
# 普通镜像 cruizba/ubuntu-dind:latest # Systemd镜像 cruizba/ubuntu-dind:systemd-latest
如果您喜欢我的工作,可以通过GitHub Sponsor支持我。非常感谢您的支持。
![GitHub Sponsors]([***]
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429