Vagrant - 如何从主机访问guest虚拟机服务器

时间:2017-01-07 21:04:36

标签: django postgresql vagrant

我在端口5432上安装了一个在其上运行postgres服务器的流浪盒,我将其添加到Vagrantfile

  config.vm.network "private_network", ip: "192.168.33.33"
  config.vm.network "forwarded_port", guest: 5432, host: 3333

但是当我尝试通过连接到192.168.33.33:3333

连接到postgres服务器时

我收到此错误:

enter image description here

连接被拒绝,如果我尝试连接到任何未打开的端口,这就是我遇到的错误。我在192.168.33.33上运行了一个端口扫描程序,并且没有看到任何转发的端口打开。这实际上就是我在Vagrantfile中所拥有的:

  config.vm.network "forwarded_port", guest: 8000, host: 8001
  config.vm.network "forwarded_port", guest: 3333, host: 3334
  config.vm.network "forwarded_port", guest: 5555, host: 5556
  config.vm.network "forwarded_port", guest: 5432, host: 3333

  config.vm.network "forwarded_port", guest: 80, host: 8888,
    auto_correct: true

并且是端口扫描器的结果:

enter image description here

它没有检测到995以上的任何端口。如何访问虚拟机postgres服务器?

更新 我找到了一种通过localhost连接的方法(charlies建议),似乎config.vm.network "forwarded_port"只将端口转发到localhost。另外,我遵循了这个指南: https://pseudoscripter.wordpress.com/2016/04/26/allow-remote-hosts-to-connect-to-postgresql-database-server-on-vagrant-box/

并编辑postgresql.conf以便它通过添加以下行来侦听所有IP:

listen_addresses = '*'         # what IP address(es) to listen on;

并编辑pg_hba.conf以允许访客IP地址:

host    all             all             192.168.33.33/24        md5

^^这一步可能与localhost:3333的工作原理无关。该指南中的步骤无法在192.168.33.33:3333上进行连接,但我可以在localhost:3333上进行连接。

解决 而不是尝试通过转发端口访问来宾IP上的服务器,而是可以在来宾端口上访问它,因此我现在可以在192.168.33.33:5432上访问服务器。当我第一次尝试时,这对我来说并不起作用,因此需要更新1中的步骤才能使其可访问。

1 个答案:

答案 0 :(得分:1)

再次阅读你的问题,我注意到private_network配置。这使得来宾主机具有该IP,因此您应该能够连接到192.168.33.33: 5432 。 PostgreSQL正在VM中侦听5432。小心,您的主机应该在同一个网络上可以访问。如果没有,则需要在主机和VM之间添加静态路由。

forwarded_port选项会将您主机上的端口映射到访客上的端口,所以

config.vm.network "forwarded_port", guest: 5432, host: 3333

会将localhost:3333(或any IP you have in your host)映射到192.168.33.33:5432

关于pg_hba.conf配置,它可以防止未经授权的访问,但您可以连接到服务器,因此错误消息会有所不同。