首页 > 解决方案 > 仅针对 REST 请求从一个 docker 容器到另一个容器的连接被拒绝错误

问题描述

我有两个 docker 容器 apiserver 和 loginserver。它们都提供 REST API 并使用 Spring Boot 构建。我创建了一个名为 my-network 的网桥网络,两个容器都连接到同一个网桥。我通过交互式 shell 从 apiserver ping loginserver,它是可访问的。我从主机发出 REST 请求,所以我知道套接字暴露了。但是,当我从 apiserver 向 loginserver 发出相同的 REST 请求时,出现错误:

: HttpQueryService::uri=http://172.28.0.7:8090/users/login
2018-06-19 19:08:24.196 ERROR 7 --- [nio-9000-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

org.apache.http.conn.HttpHostConnectException: Connect to 172.28.0.7:8090 [/172.28.0.7] failed: Connection refused (Connection refused)

以下是来自 my-network 的详细信息:

docker network inspect my-network

[
    {
        "Name": "my-network",
        "Id": "ef610688b58b6757cba57caf6261f7a1eaeb083798098214c4848cbb152cae26",
        "Created": "2018-04-21T00:19:46.918124848Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.28.0.0/16",
                    "Gateway": "172.28.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "71863d2f61789d4350fcabb1330b757500d5734a85c68b60eb1ac8f6f1e8344e": {
                "Name": "mymongo",
                "EndpointID": "717c8dbdc8993a70f9d3e97e549cb9784020b8e68e7a557c30b0818b4c9acb90",
                "MacAddress": "02:42:ac:1c:00:02",
                "IPv4Address": "172.28.0.2/16",
                "IPv6Address": ""
            },
            "936447ce8325f3a7273a7fb462d75e55841a9ff37ccf27647831b3db1b8a1371": {
                "Name": "mypg",
                "EndpointID": "6a1a1b2f7852b89a9d2cb9b9abecdabd134849cd789c31613c7ddb91a4bc43d1",
                "MacAddress": "02:42:ac:1c:00:06",
                "IPv4Address": "172.28.0.6/16",
                "IPv6Address": ""
            },
            "ad03348dffaef3edd916d349c88e8adf6cf7d88dbc40f82dc2384dee826cfa83": {
                "Name": "myloginserver",
                "EndpointID": "fe22c2b5f57b7fe4776087972ffa5f7f089ca6a59fde2fa677848b3f238ea026",
                "MacAddress": "02:42:ac:1c:00:07",
                "IPv4Address": "172.28.0.7/16",
                "IPv6Address": ""
            },
            "c69bfbf9ccdc9e29e87d2847b5c2a51e9c232fb8d06635bcef0cdd1f7c66e051": {
                "Name": "apiserver",
                "EndpointID": "46e94a52d34670eb00448b1d39a0cc365b882ece790c9d868dcee04ad141d1ca",
                "MacAddress": "02:42:ac:1c:00:0b",
                "IPv4Address": "172.28.0.11/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

标签: dockerspring-bootdocker-network

解决方案


派对迟到了,但我只是通过将地址设置为从公共 IP 地址获取 REST 请求,在我的系统上解决了这个问题:

例如:http://217.114.203.196/myrequest


推荐阅读