spring 如何修复在docker容器之间发送请求时发生的“ERR_ADDRESS_UNREACHABLE”错误?

jjhzyzn0  于 2023-04-28  发布在  Spring
关注(0)|答案(1)|浏览(670)

vps有3个docker容器,包括后端(Spring),前端(Angular)和数据库(Postgres)。对于容器之间的寻址,我使用内部IP Docker网络。当从Spring寻址到位于“IPv4Address”的db时:“ www.example.com “没有问题。但是当我在“IPv4Address”处从前端向后端发出请求时:“ www.example.com ”,返回一个错误:
GET https://172.24.0.2:8080/api/v1/ net::ERR_ADDRESS_UNREACHABLE
会有什么问题呢?怎么解决呢?

[
    {
        "Name": "custom_network",
        "Id": "3baf05ce8f75a01362969f91e78c57d0cfa79722d7072575202e12375a7b9174",
        "Created": "2023-04-25T09:13:50.877460737+03:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.24.0.0/16",
                    "Gateway": "172.24.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "397c9c4e3a0db97d01f6a1caec7badfd5c9d4c9bb41d12a11db3c4959ea9154d": {
                "Name": "backend",
                "EndpointID": "0b61ce825a240de60606be6abf0f8be4f943b9f8b0e7a2834c0ee72b0281c842",
                "MacAddress": "02:42:ac:18:00:02",
                "IPv4Address": "172.24.0.2/16",
                "IPv6Address": ""
            },
            "c35305b9272d42332475964c6556c7236290b8c05cce67185b74cdca6012a412": {
                "Name": "postgres",
                "EndpointID": "7baf108af5f4e8ebf437a3365de8c5a75235b184d627159138cfbdba560d4793",
                "MacAddress": "02:42:ac:18:00:04",
                "IPv4Address": "172.24.0.4/16",
                "IPv6Address": ""
            },
            "fe3d07eb78c02717b9b816852a13280652eca0bc593d48746292fe6d0fb11c22": {
                "Name": "frontend",
                "EndpointID": "f702828c1ceede8585fd4f33feaac544da2f706734dd88c5543c9a5cb291fd4c",
                "MacAddress": "02:42:ac:18:00:03",
                "IPv4Address": "172.24.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "custom",
            "com.docker.compose.version": "2.15.1"
        }
    }
]

我尝试创建自己的docker网络,并手动链接所有容器,但也没有成功。

CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                       NAMES
    556baf78f70a   angular    "nginx -g 'daemon of…"   14 minutes ago   Up 14 minutes   0.0.0.0:443->80/tcp, :::443->80/tcp         info-pet-angular_app-1
    a2d516c5ec0d   backend   "java -jar backend.j…"   43 minutes ago   Up 43 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   info-pet-app-1
    55b067ff2ad2   postgres              "docker-entrypoint.s…"   6 hours ago      Up 6 hours      5432/tcp                                    infopet-postgres
ao218c7q

ao218c7q1#

您不能使用内部IP(172.24.0.2)直接在Angular前端代码中,因为前端运行在浏览器中,而不是Docker网络中。从浏览器的Angular 来看,容器IP地址和端口是不可访问的。
要解决此问题,您只需将后端容器的端口(8080)暴露给主机,并使用主机的IP地址或域名从前端访问后端。之后,您应该能够通过http://localhost:8080/api/v1/从Angular代码调用后端

相关问题