我正在开发一个网络应用程序项目并开始在线托管它。 我从 OVH 获得了域名和 VPS。我在我的 VPS 中运行 2 个 docker 容器(前端和后端)。
当我通过域名连接到前端并尝试对后端进行任何调用时,我最终会收到 ERR_NAME_NOT_RESOLVED 错误。
两个 docker 容器均已启动且位于同一网络上
[
{
"Name": "custom_net",
"Id": "c4cb2d130ec50ebc383b383eb46e6ea8eef43e8564d9d7e144ee217064dbb48e",
"Created": "2023-08-24T10:14:24.929617144Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"ef1b1022ba515532688326955bbc04e3db02ae26808ebdd3bef4ac8ef6d76e91": {
"Name": "blindtest-back",
"EndpointID": "9b67ed7c930948068f3e560ef43d96328c3fda31dee01c8ad5b1014b72c7d28c",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"f13e26948ae720e06b1d5666e8289bdf68bbc8c99aee99d74f5a861659f839ff": {
"Name": "blindtest-front",
"EndpointID": "c390a890f58905af1360b2c2d3bd0f6e6a85f9d5c59cd42071de46f40564ece9",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
这是 docker-compose
version: '3'
services:
blindtest-front:
build:
context: blindtest-front
container_name: blindtest-front
ports:
- "80:80"
networks:
- custom_net
blindtest-back:
build:
context: blindtest-back
container_name: blindtest-back
ports:
- "8000:8000"
networks:
- custom_net
networks:
custom_net:
name: custom_net
driver: bridge
如果我通过 docker exec -it 进入前端容器,我可以 ping 通后端容器,但 curl 不起作用。
根据我在线搜索的理解,这是因为我的浏览器试图通过 http://blindtest-back:8000/api/whatever 访问后端 api 但他不知道,只有我的前端容器知道但请求由客户端浏览器制作。
但是我找不到一种方法来完成这项工作,我应该实现代理来进行重定向吗?
找到问题根源了。
docker、网络或使用容器名称没有任何问题。
我的问题是我的后端容器化服务正在侦听 127.0.0.1:8000 而不是 0.0.0.0:8000,使其无法从容器本身之外的任何地方访问。