【发布时间】:2018-04-12 17:59:24
【问题描述】:
我正在尝试在 docker swarm 中将我的 docker 服务连接在一起。
网络由 2 个树莓派组成。
我可以创建一个名为 test-overlay 的覆盖网络,我可以看到任一树莓派节点上的服务都可以连接到网络。
我的问题:
我无法通过覆盖网络链接到节点之间的服务。
给定以下节点和服务的配置,service1 可以使用地址http://service2 连接到service2。但它不适用于http://service3。但是http://service3 可以从service4 访问。
node1:
- service1
- service2
node2:
- service3
- service4
我是 docker swarm 的新手,不胜感激。
检查叠加层
我在两个节点上都运行了命令sudo docker inspect network test-overlay。
在主节点上,这将返回以下内容:
[
{
"Name": "test-overlay",
"Id": "skxhz8sb3f82dhh9jt9t3j5yl",
"Created": "2018-04-15T20:31:20.629719732Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"3acb436a0cc9a4d584d537edb1546988d334afa4793cc4fae4dd6ac9b48828ea": {
"Name": "docker-registry.1.la1myuodpkq0x5h39pqo6lt7f",
"EndpointID": "66887fb1f5f253c6cbec149aa51ab85168903fdd2290719f26d2bcd8d6c68dc8",
"MacAddress": "02:42:0a:00:00:04",
"IPv4Address": "10.0.0.4/24",
"IPv6Address": ""
},
"786e1fee538f81fe41ccd082800c646a0e191b0fd912e5c15530e61c248e81ac": {
"Name": "portainer.1.qyvvlcdqo5sewuku3eiykaplz",
"EndpointID": "0d29e5452c208ed637ae2e7dcec026f39d2431e8e0e20765a9e0e6d6dfdc60ca",
"MacAddress": "02:42:0a:00:00:15",
"IPv4Address": "10.0.0.21/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4101"
},
"Labels": {},
"Peers": [
{
"Name": "d049fc8f8ae1",
"IP": "192.168.1.2"
},
{
"Name": "6c0da128f308",
"IP": "192.168.1.3"
}
]
}
]
在工作节点上,这将返回以下内容:
[
{
"Name": "test-overlay",
"Id": "skxhz8sb3f82dhh9jt9t3j5yl",
"Created": "2018-04-20T14:04:57.870696195Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"4cb50161119e4b58a472e1b5c380c301bbb00a23fc99fc2e0712a8c4bde6d9d4": {
"Name": "minio.1.fo2su2quv8herbmnxqfi3g8w2",
"EndpointID": "3e85786304ed08f02c09b8e1ed6a153a3b4c2ef7afe503a1b0ca6cf341521645",
"MacAddress": "02:42:0a:00:00:d6",
"IPv4Address": "10.0.0.214/24",
"IPv6Address": ""
},
"ce99b3788a4f9438e276e0f52a8f4d29fa09179e3e93b31b14f45339ce3c5315": {
"Name": "load-balancer.1.j64h1eecsc05b7d397ejvedv3",
"EndpointID": "3b7e73d27fe30151f2dc2a0ba8a5afc7f74fd283159a03a592be10e297f58d51",
"MacAddress": "02:42:0a:00:00:d0",
"IPv4Address": "10.0.0.208/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4101"
},
"Labels": {},
"Peers": [
{
"Name": "d049fc8f8ae1",
"IP": "192.168.1.2"
},
{
"Name": "6c0da128f308",
"IP": "192.168.1.3"
}
]
}
]
【问题讨论】:
-
你能验证你的node2是你node1的worker吗?
docker node ls -
这两个节点是同一个swarm吗?
-
node2 绝对是node1 的worker,并且在同一个swarm 中。我可以确认这一点,因为我可以将服务从主服务器部署到具有放置约束
node.role == worker的工作人员。sudo docker node ls按预期返回包含两个节点的表。 -
@X0r0N - 你解决了这个问题吗?我最近有一个类似的 - 它工作得很好,但一段时间后覆盖网络“分裂”并且来自管理节点的容器无法与工作节点通信。令人惊讶的是,重新启动工作节点有所帮助,但这不应该发生。您是否对此进行了更多研究?
-
@Miq 不幸的是我根本没有让它工作。与您的解决方案不同,我的集群节点永远无法通过覆盖网络相互通信。我通过输入
hosts文件来解决我的问题,Portainer 允许您直接在 UI 中配置该文件(因此没有卷安装)。这不是一个好的解决方案,但它必须这样做。
标签: docker networking docker-swarm docker-swarm-mode