我有一个流浪汉服务器:
postgres@precise32:/home/vagrant/teste/pg-hostname-master$ ifconfig
eth0 Link encap:Ethernet
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
eth1 Link encap:Ethernet
inet addr:33.33.33.33 Bcast:33.33.33.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
端口是:
name | port
setting | 5432
我的问题是,使用jdbc的正确数据是什么?
我已经尝试过:
jdbc:postgresql://localhost:5432/test
jdbc:postgresql://33.33.33.33:5432/test
jdbc:postgresql://127.0.0.1:5432/test
这些都不起作用。
org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
更新
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1020/postgres
在postgresql.conf
Listen_adresses = '*'
流浪者日志
C:\Users\xx>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
DL is deprecated, please use Fiddle
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] VM already provisioned. Run `vagrant provision` or use `--provision` to force it
基本上,我需要知道如何在vagrant(ubuntu)和windows桌面之间设置远程数据库连接。两者都在同一台桌面上运行。
答案 0 :(得分:2)
首先是免责声明 - 我已经使用了很多虚拟机和postgresql,但我没有使用过vagrant,所以我可以给出的建议是有限的。
根据您的说明和评论中的信息,我认为您的问题与VM和主机环境之间的网络连接有关。
Virtualbox支持几种不同的网络仿真 - 例如NAT,桥接,内部网络,仅限主机。当使用vagrant时,vagrant将尝试管理VM以与'vagrantfile'中的配置对齐。
'NAT'适配器使用模拟NAT。这有点像在专用网络内部拥有VM,路由器将其连接到互联网。除非设置端口转发,否则可以通过NAT接口进行传出连接,但不能进入传入连接。你的流浪日志文件说:
[default] -- 22 => 2222 (adapter 1)
表示端口2222正被转发到VM上的端口22(至少这是我解释此打印输出的方式)。这将允许您通过SSH从客户端连接到VM,例如在Windows环境中运行的putty。 Virtualbox侦听Windows环境中环回适配器(127.0.0.1)上的端口22,将任何连接转发到VM中的NAT适配器。
您的ifconfig显示两个以太网适配器(除了环回) - 一个配置为地址10.0.2.15,另一个配置为33.33.33.33。
10.0.2.15是NAT适配器使用的地址。
33.33.33.33似乎已经在vagrantfile中的以下行配置:
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network :private_network, ip: "33.33.33.33"
因此,这是配置内部网络,可能使用虚拟机中的“仅主机”适配器。问题是,我怀疑IP地址33.33.33.33对这样的网络无效。虚拟机中的默认内部网络是为网络192.168.56.0/24设置的。
以下是我建议您按照以下步骤解决此问题的步骤:
在执行任何其他操作之前,请仔细检查您是否可以使用以下命令建立与postgresql服务器的连接:
su - postgres
psql -h 127.0.0.1 template1
从VM上的shell(即通过ssh登录或使用VM控制台)。这可以确保postgresql正在运行并接受来自网络接口的连接。
确认将Virtualbox VM配置为仅限主机的适配器为“Adapter 2”。从虚拟框GUI中,选择VM - >设置 - >网络 - >适配器2.它应该说'Host-only adapter'。请注意适配器的名称。
检查仅限主机网络的配置。从Virtualbox GUI,File - >偏好 - >网络 - >仅限主机的网络 - >双击步骤1中的指定网络。记下IPv4地址和网络掩码。默认值为192.168.56.0和255.255.255.0。
您应该使用专用网络。
在您的vagrantfile中,将IP地址更改为步骤2中所见的网络范围内的地址 - 例如。 192.168.56.10。然后使用所需的任何命令重新启动vagrant以使其重新配置VM。
确认您可以从Windows命令提示符ping您使用的地址。此外,您可以使用相同的地址在Windows端使用SSH客户端连接VM。
如果所有这些都有效,您应该能够使用jdbc:postgresql://{ipaddr}:5432/test
连接到postgresql服务器,其中{ipaddr}是您在步骤3,4中使用的IP地址。
答案 1 :(得分:0)
首先检查您是否没有使用相同IP运行的任何其他VM。 vagrant halt
该机器并尝试ping“33.33.33.33”。它不应该回应。 (顺便说一句,33.33.33.x是某人拥有的公共网络,你应该使用private network,如192.168.33.x.)
另外一些VPN软件可能会破坏路由。你在跑吗?
除非您设置port forwarding:
,否则localhost地址将无法在主机中运行Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 5432, host: 5432
end