【问题标题】:vagrant /etc/hosts: machine IP vs localhostvagrant /etc/hosts: 机器 IP vs localhost
【发布时间】:2018-07-16 15:27:47
【问题描述】:

我有一个使用这个 IP 地址的 vagrant 机器设置:

Vagrant.configure("2") do |config|
    config.vm.network :private_network, ip: 192.168.33.11
    config.vm.network "forwarded_port", guest: 80, host: 8080
    config.vm.hostname = "my-devenv"
...
end

一切正常。但是我对 VM 上的 /etc/hosts 文件感到困惑:使用 localhost 和 VM 的 IP 有什么区别(127.0.0.1 some-dev-site.dev vs 192.168.33.11 some-dev-site.dev)?

127.0.0.1 localhost
127.0.0.1 some-dev-site.dev
192.168.33.11 some-dev-site.dev

【问题讨论】:

    标签: vagrant vagrantfile hosts virtual-hosts vagrant-provision


    【解决方案1】:

    常规

    本地主机通常在不同机器上总是相同的:127.0.0.1(本地环回),VM IP 是“网络”上的外部 IP。例如,您可以通过访问 VM IP 从您的计算机连接到您的 VM,但是如果您从您的计算机连接到 localhost 到 VM,您最终会在您自己的计算机上。

    如果您将服务绑定到 127.0.0.1,您将无法从“机器”的“外部”访问它。

    如果您想了解更多信息,这可能会提供更好的解释: https://www.lifewire.com/network-computer-special-ip-address-818385

    更具体地针对您的情况

    不确定我是否正确理解了您的问题,但我想您的问题是:您的虚拟机的 /etc/hosts 中的主机名是什么?那是因为它们不存在于 DNS 中,如果你连接到这些主机,它需要在正确的位置结束,在这种情况下是虚拟机本身。

    【讨论】:

    • 所以如果我理解得很好:当我在我的本地机器上调用some-dev-site.dev 时(它的主机中也有:192.168.33.11 some-dev-site.dev)它使用some-dev-site.dev 与VM 对话,然后VM 会翻译这个到 127.0.0.1?
    • 这意味着最后:VM的IP 192.168.33.11 == VM的127.0.0.1
    • 如果 vagrant 在您机器上的本地 /etc/hosts 中添加了 192.168.33.11 some-dev-site.dev,那么您将通过其外部接口访问您的 VM 上的 Web 服务。当您在虚拟机内部并访问 some-dev-site.dev 时,它很可能会连接到本地环回接口 127.0.0.1 上的 Web 服务。您需要将 /etc/hosts 视为简单的本地“DNS 服务器”。并且地址 127.0.0.1 作为私有 IP 地址仅对您所在的机器可见。
    • 和 192.168.33.11 != VM 的 127.0.0.1 是两个独立的接口。在你的虚拟机上运行命令:ifconfig,你会看到类似 eth0 192.168.33.11 和 lo0 127.0.0.1
    猜你喜欢
    • 2015-02-01
    • 2014-10-06
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多