首页 > 解决方案 > Docker 容器无法在 localhost 和同一网段中访问

问题描述

docker 新手,请更正我的陈述我正在尝试使用 docker 引擎机器中的端口 80 访问 docker 容器 ex:nginx Web 服务器,但无法访问它。

这里是我的 docker Engine 网络 10.20.20.0/24。

Docker 引擎 IP:10.20.20.3

> Telnet 10.20.20.3 80  Connection failed
    tcp        0      0 10.20.20.3:80       0.0.0.0:*               LISTEN      28953/docker-proxy

Docker 容器 IP:172.18.0.4

> Telnet 172.18.0.4 80  Connection success

Docker 网络详细信息

[root@xxxxxxxxx]# docker network inspect 1984f08c739d [
    {
        "Name": "xxxxxxxxxxxxx",
        "Id": "1984f08c739d6d6fc6b4769e877714844b9e57ca680f61edf3a528bd12ca5ad1",
        "Created": "2021-11-13T21:01:27.53591809+05:30",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "126d5128621fa6cde0389f4c6e0b53be36670bce5f62e981da6e17722b88c4a9": {
                "Name": "xxxxxxxxxxxxxxx",
                "EndpointID": "b011052062ae137e3d190032311e0fbc5850f0459c9b24d8cc1d315a9dc18773",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "xxxxxxxx",
            "com.docker.compose.version": "1.29.2"
        }
    } ]

我可以在 10.20.21.0/24 等其他网络中访问这些 nginx。但不在同一个网络 10.20.20.0/24 或在其上运行的同一个 docker 引擎上。

标签: dockernginxcontainers

解决方案


我的环境 Docker 引擎 VM 具有 2 个接口,即具有不同子网的 eth0 和 eth1。在以前它不起作用,因为两个接口在 /etc/sysconfig/network-scripts(route-eth0、route-eth1 和 rule-eth0、eth1)基础 hyper-v AHV 中都有单独的路由表。这些路由写入持久接口。我试图删除 eth0 的路由。由于 eth0 不需要路由表来持久化,所以它会在 Linux 中默认出现。然后重新启动网络..Hola 那里我们去监听 eth0 接口的 docker 并为 eth1 做了一些事情。它的工作。eth0 和 eth1 接口我都可以映射到 dockers 网络。它的工作就像魅力。我相信 AHV 不需要用于不同和相同网络子网的 AHV VM 的路由表。所以这里总结了它的路由问题。问题解决了,

在 AHV VM 中没有任何路由的情况下重新启动并关闭电源后,这两个接口都能正常工作。


推荐阅读