我有一个 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 = '*'
Vagrant 日志
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 桌面之间设置远程数据库连接。两者都在同一个桌面上运行。
最佳答案
首先是一个免责声明——我经常使用 virtualbox 和 postgresql,但我没有使用 vagrant,所以我能提供的建议是有限的。
根据您的描述和评论中的信息,我认为您的问题与虚拟机和主机环境之间的网络连接有关。
Virtualbox 支持几种不同的网络模拟 - 例如 NAT、桥接、内部网络、仅主机。使用 vagrant 时,vagrant 将尝试管理 VM 以与“vagrantfile”中的配置保持一致。
“NAT”适配器使用模拟 NAT。这有点像将 VM 置于专用网络内部,并通过路由器将其连接到 Internet。您可以通过 NAT 接口(interface)进行传出连接,但不能进行传入连接,除非您设置了端口转发。你的 vagrant 日志文件是这样写的:
[default] -- 22 => 2222 (adapter 1)
表明端口 2222 正在转发到 VM 上的端口 22(至少我是这样解释这个打印输出的)。这将允许您从客户端(例如在 Windows 环境中运行的 putty)通过 SSH 连接到 VM。 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"
因此,这是在配置一个内部网络,可能在 virtualbox 中使用了一个“host-only”适配器。问题是,我怀疑 IP 地址 33.33.33.33 对于这样的网络无效。 virtualbox默认设置的内部网络为网络192.168.56.0/24。
我建议您按照以下步骤解决此问题:
在执行任何其他操作之前,仔细检查您是否可以使用以下方法建立到 postgresql 服务器的连接:
su - postgres psql -h 127.0.0.1 template1
从 VM 上的 shell(即通过 ssh 登录或使用 VM 控制台)。这可确保 postgresql 正在运行并接受来自网络接口(interface)的连接。
确认 Virtualbox VM 已针对仅主机适配器配置为“适配器 2”。从 virtualbox GUI 中,选择 VM -> settings -> Network -> Adapter 2。它应该显示“Host-only adaptor”。记下适配器的名称。
检查仅主机网络的配置。在 Virtualbox GUI 中,File -> Preferences -> Network -> Host-Only Networks -> 双击步骤 1 中的命名网络。记下 IPv4 地址和网络掩码。默认值为 192.168.56.0 和 255.255.255.0。
您应该使用专用网络。
在您的 vagrantfile 中,将 IP 地址更改为在第 2 步中看到的网络范围内的 IP 地址 - 例如。 192.168.56.10。然后使用任何需要的命令重新启动 vagrant 以重新配置 VM。
确认您可以从 Windows 命令提示符中 ping 通您使用的地址。此外,您还可以使用同一地址在 Windows 端使用 SSH 客户端连接虚拟机。
如果所有这些都有效,您应该能够使用
jdbc:postgresql://{ipaddr}:5432/test
连接到 postgresql 服务器,其中 {ipaddr} 是您在步骤 3,4 中使用的 IP 地址。
关于sql - 使用 jdbc 配置 SQL 连接 - vagrant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081760/