使用jdbc配置SQL连接 - vagrant

时间:2014-02-27 22:17:41

标签: sql linux postgresql jdbc vagrant

我有一个流浪汉服务器:

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桌面之间设置远程数据库连接。两者都在同一台桌面上运行。

2 个答案:

答案 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设置的。

以下是我建议您按照以下步骤解决此问题的步骤:

  1. 在执行任何其他操作之前,请仔细检查您是否可以使用以下命令建立与postgresql服务器的连接:

     su - postgres
     psql -h 127.0.0.1 template1
    

    从VM上的shell(即通过ssh登录或使用VM控制台)。这可以确保postgresql正在运行并接受来自网络接口的连接。

  2. 确认将Virtualbox VM配置为仅限主机的适配器为“Adapter 2”。从虚拟框GUI中,选择VM - >设置 - >网络 - >适配器2.它应该说'Host-only adapter'。请注意适配器的名称。

  3. 检查仅限主机网络的配置。从Virtualbox GUI,File - >偏好 - >网络 - >仅限主机的网络 - >双击步骤1中的指定网络。记下IPv4地址和网络掩码。默认值为192.168.56.0和255.255.255.0。

    您应该使用专用网络。

  4. 在您的vagrantfile中,将IP地址更改为步骤2中所见的网络范围内的地址 - 例如。 192.168.56.10。然后使用所需的任何命令重新启动vagrant以使其重新配置VM。

  5. 确认您可以从Windows命令提示符ping您使用的地址。此外,您可以使用相同的地址在Windows端使用SSH客户端连接VM。

  6. 如果所有这些都有效,您应该能够使用jdbc:postgresql://{ipaddr}:5432/test连接到postgresql服务器,其中{ipaddr}是您在步骤3,4中使用的IP地址。

    < / LI>

答案 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