本节讨论如何使用远程Docker运行Docker容器,但Docker容器不能从主容器访问。我们开始将我们的服务构建为构建在Docker镜像中的微服务,因此当我们运行集成测试时,我们需要能够在Docker中运行我们的服务。

到目前为止,我们团队提出了两个解决方案:

  1. 使用而不是码头工人
    • 机器允许运行Docker容器没有远程Docker,从而减轻了网络问题
    • 似乎所有Circle CI的VM映像都运行Ubuntu,而我们的脚本需要CentOS。要使这些脚本在Ubuntu上也能工作,还需要做很多未知的工作。
    • 如果Circle CI有CentOS VM图像,我们可以使用,这将是首选的选择
  2. 在容器中运行测试本身(例如,为每个测试作业编写Dockerfile)
    • 基本上是让主容器进行容器编排
    • 联网解决了,因为测试和服务都将在远程Docker中,因此它们可以彼此对话
    • 对我们来说,一个好处是我们的CI配置是巨大的和不可维护的,这可以帮助我们重新审视我们的工作,清理任何陈旧的依赖关系
    • 缺点是它使CI系统稍微复杂一点,并且使主容器没有得到充分利用

想法吗?

1像

我们刚刚发现的另一个选项是通过remote-docker VM使用SSH隧道。

docker运行-p 3000:3000…ssh -N -L localhost:3000:localhost:3000 remote-docker

将运行一个服务,将端口3000暴露给远程docker VM,然后将远程docker VM中的端口3000转发给主测试机。

但是,这似乎会降低到容器的网络流量,因此我沿着这个思路尝试了不同的方法。有人有其他想法吗?