首页 > 解决方案 > 在不受控制的 CI 环境中连接到不安全的本地 docker 注册表

问题描述

我正在构建一个在 docker 注册表上执行操作的微服务。

我正在构建的微服务有一个测试,它通过Docker Hub 中的 docker-registry 映像启动一个 docker-registry ,因此微服务可以连接到它、设置它、处理它等等......

CI 中的测试失败:Docker 客户端无法连接到测试注册表,因为它不安全。这是在 CI 中,并且每次都是动态的、不同的随机 ip/port,并且 docker 守护进程被其他并行测试使用......所以让测试编辑全局 jsons 并重新启动 docker 守护进程似乎是一个糟糕的解决方案。

有没有人解决这个问题?你如何在 CI 中测试与 docker-registry 的集成?我注定要修改全局 docker jsons 并重新启动/触发重新加载配置吗?

一些细节:构建工具是 Bazel 并在 GCB 中运行,因此测试本身在 Google 云上的 RBE 工作人员中运行,这些工作人员是隔离的,在运行测试时没有网络访问权限,我不能真正配置太多,不是我的机器,每次测试都是氡气机等等......

标签: dockertestingcontinuous-integrationdocker-registry

解决方案


我们最终启动了另一个容器,其中包含一个 docker daemon(没有安装外部 docker daemon socket,所以它实际上是另一个 docker daemon 实例)。

我们在闲暇时这样做,所以只有在我们知道私有注册表地址并将 docker 守护进程配置为使用不安全的注册表标志启动之后。

为了让容器进行通信,我们让它们的容器有一个名称并共享一个网络。


推荐阅读