VPS 内的 Docker 通信(ERR_NAME_NOT_RESOLVED)

问题描述 投票:0回答:1

我正在开发一个网络应用程序项目并开始在线托管它。 我从 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 web-applications vps
1个回答
0
投票

找到问题根源了。

docker、网络或使用容器名称没有任何问题。

我的问题是我的后端容器化服务正在侦听 127.0.0.1:8000 而不是 0.0.0.0:8000,使其无法从容器本身之外的任何地方访问。

© www.soinside.com 2019 - 2024. All rights reserved.