我正在使用Jenkins在另一台服务器上旋转一个docker-compose项目并运行测试。 安装Docker的服务器与Jenkins服务器不在同一子网中。我们使用其他服务器,因为后者是由第三方提供的,无法旋转容器。
Docker服务器是Red Hat 7.7,并且正在运行Docker CE 19.03.1。
Jenkins在ssh中连接到Docker服务器,然后运行docker-compose命令。 Docker为项目创建了三个容器和一个默认网络。
一切正常,但是有时,Jenkins会失去与Docker服务器的所有连接。旋转容器后,当前作业将暂停直到超时,通常会出现“管道破裂”错误。
从那时起,Jenkins根本无法连接到Docker服务器。任何端口上的所有连接都只是超时。
在我出于某种原因仍然可以从PC连接到计算机之前,手动停止并删除容器和网络。然后,一切又恢复正常了。
问题实际上似乎是Docker网络。但是,为什么它只会断开来自Jenkins服务器而不是我的PC的连接?为什么随机?
我知道这对于SO来说可能太含糊或太具体。我什至不知道从哪里开始调试。请在评论中让我知道我应该添加哪些信息,或者是否应该询问其他社区。 p>
答案 0 :(得分:1)
从10.0.0.0/16
到10.1.0.0/16
并返回的流量通过对等连接(默认网关)进行路由。
如果docker
在以下位置的实例上运行
10.0.0.0/16
子网将使用CIDR br0
创建一个桥接网络(即10.1.0.0
),然后您还将获得该流量的本地路由。
尝试从10.0.0.0/16
连接到10.1.0.0/16
的过程将被路由到docker
网络,而不是默认网关,阻止您连接到{{1}中的实例}子网。
您可以创建具有固定子网/网关的docker
network来避免这些问题,例如:10.1.0.0/16
。