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