2016-12-15 143 views
-1

现在我正在设置一个基于码头工人图像的部署应用程序。码头工人和码头工人中的码头工人组成块无端口的一个端口

我用gitlab词来:

  1. 测试各种服务
  2. 构建每个服务
  3. Dockerize每幅图像(创建搬运工容器)
  4. 运行集成测试(启动搬运工撰写启动所有服务在特殊端口上运行集成测试)
  5. 停止产品图像并运行新图像

我为每个服务都做了这个,但是我遇到了一个问题。

当我开始我的码头集装箱进行集成测试时,它是在gitlab ci任务中设置的。对于每个任务使用基于docker的runner。我也安装我的主机码头套接字,以便能够在码头工人中使用码头工人。

所以我的gradle docker镜像是由gitlab runner启动的。然后docker将被安装,所有的图片将使用docker撰写。

一个微服务监听端口10004.在泊坞窗撰写文件中有一个11004:10004端口映射。

我的集成测试尝试连接到端口11004.但现在不起作用。

当我连接到运行泊坞窗图像进行合成,而它试图通过手动调用

wget ip: port 

我刚刚得到的消息连接并等待响应执行集成测试,然后我不能做到这一点。我的测试可以连接成功。我的服务不记录有关新连接的任何消息。

当我在我的主机外壳内执行这个wget命令然后它工作。

这是一个公共ip,在我的容器中,我也可以使用telnetwget连接到其他端口。当我尝试从泊坞窗实例中的泊坞窗连接时,只有一个服务的一个端口被破坏。

当我不使用docker撰写时,它的工作原理。 Docker撰写似乎设置了一个特殊的默认网络,它做了一些奇怪的事情。

设置网络到主机也工作...

所以有没有人也做出这样的体验使用泊坞窗组成是什么时候?

同样的装置作品在码头工人的Mac完美无瑕,但我的服务器上的Debian 8

运行我的解决方案,现在是使用shell亚军,以避免码头工人码头工人的问题。它也在那里工作。

因此码头工人与码头工人组合的码头似乎有一个丑陋的错误。

我正在写作,而我坐在地铁里,但我希望描述我的问题也足以谈论经验。我认为我们不需要一些源代码来查找错误的配置,因为它在docker和Mac上无需docker即可运行。

回答

0

我想到Docker中的码头仍然有一些奇怪的行为。我通过添加一个新的gitlab ci runner来解决我的问题,这是一个shell runner。因此docker-compose在我的主机上运行,​​一切都完好无损。

我可以重复使用相同的运行器来启动生产中的docker镜像,就像集成测试一样。所以简单的修复对我来说有另一个好处。

结果是避免陷阱最佳实践:

只有当确实需要使用泊坞窗泊坞窗。

例如,以确保您的主码头图像和您感兴趣的码头图像之间的快速io通信。

玩得开心使用码头(在码头(码头)):]