【问题标题】:Docker-toolbox cannot access VM by IPDocker-toolbox 无法通过 IP 访问 VM
【发布时间】:2025-12-20 17:55:07
【问题描述】:

我运行:docker run -p "9999:80" nginx 并尝试使用以下地址访问 Web 服务器:172.17.0.2:9999。我从docker inspect [container_id]得到这个IP:

 "NetworkSettings": {
    "Bridge": "",
    "SandboxID": "877eb750a0f35037f0b9dff2b6bd95f7dd4aaf80ae0ed8cf65e20ad8aeb85132",
    "HairpinMode": false,
    "LinkLocalIPv6Address": "",
    "LinkLocalIPv6PrefixLen": 0,
    "Ports": {
        "80/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "9999"
            }
        ]
            },
            "SandboxKey": "/var/run/docker/netns/877eb750a0f3",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "2599dc8c2311725e9816fc30e60a86550cb42887871a921365e3df866427464e",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "ffc037f862047b118824b8d322aab771ba75a009881959461be577ffebb42a80",
                    "EndpointID": "2599dc8c2311725e9816fc30e60a86550cb42887871a921365e3df866427464e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }

但这并没有按预期工作。如果我从主机 ping 172.17.0.2 我没有得到任何响应。

有什么想法吗? docker-toolbox 太麻烦了,因为 docker 不支持我的 Windows 10 版本。

【问题讨论】:

  • 呃,为什么投反对票?!通过投票结束,我猜主持人不知道 docker 是什么(我也主持了!)。 SO上有一个docker标签是有原因的。
  • 无法从主机访问 docker 网络 172.17.0.0/16 是(我认为)docker-toolbox 的限制。

标签: docker docker-toolbox


【解决方案1】:

由于您使用docker run -p 9999:80 启动了容器,因此您可以通过公共端口 9999 上的虚拟机 IP 地址访问它。docker-machine ip 会告诉您该 IP 地址(但通常是 192.168.99.100)。所以尝试将http://192.168.99.100:9999/ 作为 URL 来访问容器。

容器内部 IP 地址并不是特别有用。它们的一个重要问题是无法从其他主机访问它们。在 Docker Toolbox 环境中,与 Docker 相关的所有内容实际上都在虚拟机中运行,并且您的主机系统被视为“其他主机”。另请注意,如果您确实有机会使用它(或者更经常使用容器间 DNS 让一个容器通过其docker run --name 到达另一个容器),您需要服务器在容器内侦听的端口,而不是发布的端口:从另一个容器你可能会使用http://nginx_container_name:80/

【讨论】:

  • 谢谢大卫。这完美地工作。我习惯于在 Linux 上使用 docker,我对 docker-toolbox 感到有些头疼,因为我忘记了我在 Windows 10 上。