docker - Docker swarm overlay,单节点,服务之间无连接
问题描述
我试图建立从一个服务到另一个服务的连接,为了实现它,我创建了一个覆盖网络和两个附加到它的服务,就像这样。
$ docker network create -d overlay net1
$ docker service create --name busybox --network net1 busybox sleep 3000
$ docker service create --name busybox2 --network net1 busybox sleep 3000
现在我确保我的服务正在运行并且都连接到覆盖。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ecc8dd465cb1 busybox:latest "sleep 3000" About a minute ago Up About a minute busybox2.1.uw597s90tkvbcaisgaq7los2q
f8cfe793e3d9 busybox:latest "sleep 3000" About a minute ago Up About a minute busybox.1.l5lxp4v0mcbujqh79dne2ds42
$ docker network inspect net1
[
{
"Name": "net1",
"Id": "5dksx8hlxh1rbj42pva21obyz",
"Created": "2021-06-22T14:23:43.739770415Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.4.0/24",
"Gateway": "10.0.4.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"ecc8dd465cb12c622f48b109529534279dddd4fe015a66c848395157fb73bc69": {
"Name": "busybox2.1.uw597s90tkvbcaisgaq7los2q",
"EndpointID": "b666f6374a815341cb8af7642a7523c9bb153f153b688218ad006605edd6e196",
"MacAddress": "02:42:0a:00:04:06",
"IPv4Address": "10.0.4.6/24",
"IPv6Address": ""
},
"f8cfe793e3d97f72393f556c2ae555217e32e35b00306e765489ac33455782aa": {
"Name": "busybox.1.l5lxp4v0mcbujqh79dne2ds42",
"EndpointID": "fff680bd13a235c4bb050ecd8318971612b66954f7bd79ac3ee0799ee18f16bf",
"MacAddress": "02:42:0a:00:04:03",
"IPv4Address": "10.0.4.3/24",
"IPv6Address": ""
},
"lb-net1": {
"Name": "net1-endpoint",
"EndpointID": "2a3b02f66f395e613c6bc88f16d0723762d28488b429a9e50f7df24c04e9f1f0",
"MacAddress": "02:42:0a:00:04:04",
"IPv4Address": "10.0.4.4/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4101"
},
"Labels": {},
"Peers": [
{
"Name": "e1c2ac76b95b",
"IP": "10.18.0.6"
}
]
}
]
到目前为止,一切都很好!接下来,我 ssh 进入其中一个容器并尝试对第二个容器进行 nslookup,但没有运气。
$ docker exec -it busybox.1.l5lxp4v0mcbujqh79dne2ds42 sh
/ # nslookup busybox2
Server: 127.0.0.11
Address: 127.0.0.11:53
Non-authoritative answer:
*** Can't find busybox2: No answer
*** Can't find busybox2: No answer
/ # nslookup busybox2.1.uw597s90tkvbcaisgaq7los2q
Server: 127.0.0.11
Address: 127.0.0.11:53
Non-authoritative answer:
*** Can't find busybox2.1.uw597s90tkvbcaisgaq7los2q: No answer
*** Can't find busybox2.1.uw597s90tkvbcaisgaq7los2q: No answer
我知道overlay
这里的问题很常见,但它们主要是关于节点到节点的连接,而不是单节点群。要记住的另一个想法是该节点上根本没有本地防火墙。
我试图以错误的方式连接还是配置问题?
解决方案
docker service create ... --network net1
默认情况下不创建网络别名。要获得该行为,您需要使用--network 的长格式语法
docker service create --network name=net1,alias=busybox1 busybox tail -f /dev/null
有趣的是,使网络可连接具有类似的效果。通常一个网络是可附加的,这样容器就可以通过它附加到它上面,docker run --network net1 ...
所以虽然这种方法有效,但对于任何应该防止的网络附加性来说,它都有潜在的不良副作用。
推荐阅读
- express - 从反应应用程序获取到本地主机快速服务器的cors错误
- sql - SQL Oracle 输入格式
- php - 警告:odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 07001
- mysql - 由于多进程导致mysql写入失败时重试的最佳做法是什么
- ios - 如何只配置一次自定义 UITableViewCell?
- php - Laravel 异步工作者
- java - 收到有关错误 - 在类路径资源 [] 中定义名称为“entityManagerFactory”的 bean 创建错误:调用 init 方法失败;
- html - 为什么我的导航栏没有向左对齐?
- java - 在不使用数组和特殊方法的情况下,如何创建 nthWord 方法?
- codeigniter - 使用 .htaccess 覆盖 Codeigniter 路由