我想在构建 docker 映像时运行集成测试。这些测试需要实例化 docker 容器。
是否有可能在这种多阶段 docker 构建中访问 docker?
不,你不能这样做。
您需要以某种方式访问主机的 Docker 套接字。在独立docker run命令中,您可以执行类似的操作docker run -v /var/run/docker.sock:/var/run/docker.sock,但无法将该选项(或任何其他卷安装)传递到docker build。
对于运行单元类型测试(没有外部依赖项),我只需在 Docker 外部的开发或核心 CI 构建环境中运行它们,然后运行 rundocker build直到它们通过。对于集成类型测试(确实如此),您需要设置这些依赖项,也许使用 Docker Compose 文件,这在 Docker 之外也更容易完成。这也避免了需要将测试代码及其附加依赖项构建到映像中。
(从技术上讲,有两种方法可以解决这个问题。这两种方法中更简单的一种是打开基于 TCP 的 Docker 套接字造成的大规模安全灾难;然后你的 Dockerfile 可以连接到那个 [“远程”] Docker 守护进程并启动容器,停止它们,杀死自己,模拟主机进行入站 SSH 连接,启动一个超越容器构建的比特币矿工,等等...实际上它允许主机上的任何进程执行任何这些操作。更难的是,正如@RaynalGobel在评论中建议,尝试在容器内启动一个单独的 Docker 守护进程;那里的 DinD 图像链接指出它需要一个--privileged容器,而您在构建时又无法拥有该容器。)
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |