Docker-toolbox 无法通过 IP 访问 VM
Docker-toolbox cannot access VM by IP
I 运行: 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 run -p 9999:80
启动容器后,您可以在 public 端口 9999 上的虚拟机 IP 地址上访问它。docker-machine ip
会告诉您该 IP 地址(但它通常是 192.168.99.100)。所以尝试 http://192.168.99.100:9999/
作为 URL 到达容器。
容器内部 IP 地址不是特别有用。它们的一个重要问题是无法从其他主机访问它们。在 Docker 工具箱环境中,与 Docker 相关的所有内容实际上都在虚拟机中运行,因此您的主机系统算作 "other hosts"。另请注意,如果您确实有机会使用它(或更经常使用容器间 DNS 使一个容器通过其 docker run --name
到达另一个容器),您需要服务器在容器内侦听的端口,而不是已发布的端口端口:来自另一个容器,您可以使用 http://nginx_container_name:80/
.
I 运行: docker run -p "9999:80" nginx
并尝试使用以下地址访问 Web 服务器:172.17.0.2:9999
。我从 docker inspect [container_id]
:
"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 run -p 9999:80
启动容器后,您可以在 public 端口 9999 上的虚拟机 IP 地址上访问它。docker-machine ip
会告诉您该 IP 地址(但它通常是 192.168.99.100)。所以尝试 http://192.168.99.100:9999/
作为 URL 到达容器。
容器内部 IP 地址不是特别有用。它们的一个重要问题是无法从其他主机访问它们。在 Docker 工具箱环境中,与 Docker 相关的所有内容实际上都在虚拟机中运行,因此您的主机系统算作 "other hosts"。另请注意,如果您确实有机会使用它(或更经常使用容器间 DNS 使一个容器通过其 docker run --name
到达另一个容器),您需要服务器在容器内侦听的端口,而不是已发布的端口端口:来自另一个容器,您可以使用 http://nginx_container_name:80/
.