我有一个装有 Ubuntu 的虚拟机,它安装在 Windows 10 主机内,LAN 中的所有 PC 都可以通过其 IP 地址访问它。在 Ubuntu 中,我在 docker-machine 中运行 docker 容器。Docker machine 只能在 Ubuntu 系统中访问。架构可以在提供的图像链接中找到。
LAN-UbuntuVM-Docker-Machine 的架构 https://ibb.co/LzTbFzL
现在我在docker machine里面运行一个docker容器
docker run -d -p 8000:80 nginx
将 Docker Machine 的 8000 端口绑定到容器 80,在 Ubuntu 机器上我可以使用以下方式访问容器http://192.168.99.100:8000从 Ubuntu 机器上的浏览器。
我在 /etc/hosts 文件中添加了一个条目,为 docker-machine 提供域名
...
192.168.99.100 docker.devv
...
现在我可以使用http://docker.devv:8000/在 Ubuntu 虚拟机内。
现在我想使用域名从 Windows 主机访问 Docker 容器,例如“http://docker.devv:8000/“
我尝试将主机名为“docker.devv”的 Ubuntu VM ips 添加到 winodws etc\host 文件,但没有效果。
有人可以帮忙吗?
答案1
-p 8000:80
我想指出和之间的区别http://docker.devv:8080/
?
8000 与 8080
编辑:
除非在 Windows 和 Ubuntu 机器上添加了一些路由规则,否则不应从 Windows 直接访问 192.168.99.100。
因此,请检查您是否可以从 Windows 计算机的公开端口访问 Ubuntu 计算机的 IP。如果可行,则我们需要修复域解析问题。如果不行,请检查 Ganesh Kathiresan 的评论中指出的您是否使用桥接网络,并检查防火墙是否处于活动状态。
编辑:
如果对容器使用主机网络模式,情况会有所不同: https://docs.docker.com/network/host/
注意:由于使用主机模式网络时容器没有自己的 IP 地址,因此端口映射不起作用,并且 -p、--publish、-P 和 --publish-all 选项将被忽略,而是产生警告。
如果您对容器使用主机网络模式,则该容器的网络堆栈不会与 Docker 主机隔离(容器共享主机的网络命名空间),并且容器不会分配自己的 IP 地址。例如,如果您运行绑定到端口 80 的容器并使用主机网络,则容器的应用程序在主机 IP 地址的端口 80 上可用。
因此,请尝试从 Windows 通过 80 端口访问 ubuntu。
编辑:
因为您可以访问 80 端口(如果 ubuntu 中没有其他 HTTP 服务应答),所以问题出在容器上的主机网络模式,它不允许 -p 标志工作,因为容器使用与主机相同的 IP。
您可以保持这种状态,但如果您计划添加其他容器并需要在它们上使用相同的 HTTP 80 端口,我建议在这些容器上使用桥接模式。