如何使用 Vagrant 连接两个虚拟机(postgreSQL 和 tomee)?
How to connect two VM (postgreSQL and tomee) using Vagrant?
我正在尝试使用 Virtualbox 和 Vagrant 构建虚拟环境。
目标是能够从 pc 浏览器访问虚拟机 'server' 上与虚拟机 'db'.
交互的应用程序 运行
我成功创建了虚拟机。
第一个是 Apache Tomee 运行,我可以通过浏览器访问它。它工作正常。
第二个是 Postgres 运行,我可以通过浏览器访问它。它也能正常工作。
当我尝试将 VM 'server' 与 'db' 连接时,出现 http 500 错误(仅当我尝试对应用程序进行某些数据库操作时),特别是:
"Connection to localhost:2222 refused. Check that the hostname and port
are correct and that the postmaster is accepting TCP/IP connections.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)"
我从 pc 浏览器测试了这两台机器,它们工作正常(事实上,在 db 机器上我看到添加了对象)。
这是 Vagrantfile:
config.vm.define "server" do |node|
node.vm.hostname = "server"
node.vm.network "private_network", ip: "10.12.1.101", virtualbox__intnet: true
[...]
node.vm.network "forwarded_port", guest: 22, host: 2211, id: 'ssh', auto_correct: true
node.vm.network "forwarded_port", guest: 8080, host: 2212
node.ssh.forward_agent = true
[...]
end
config.vm.define "client" do |node|
node.vm.hostname = "client"
node.vm.network "private_network", ip: "10.12.1.201", virtualbox__intnet: true
[...]
node.vm.network "forwarded_port", guest: 22, host: 2221, id: 'ssh', auto_correct: true
node.vm.network "forwarded_port", guest: 5432, host: 2222
end
在 apache-tomee/conf 中的文件 tomee.xml 中,我为测试中使用的数据库连接指定了相同的代码(在虚拟环境中可以正常工作)
<tomee>
<Resource id="PostgreSQL Database" type="DataSource">
JdbcDriver org.postgresql.Driver
JdbcUrl jdbc:postgresql://localhost:2222/music
UserName postgres
Password postgres
JtaManaged true
DefaultAutoCommit false
</Resource>
</tomee>
在 db VM 上我修改了 postgresql.conf 和 pg_hba.conf 添加
listen_addresses = '*'
第一个和
host all all 0.0.0.0/0 md5
在第二个。我不明白为什么当 tomee 在我的电脑上 运行 我可以访问两个 VM,但是 'server' 无法与 'db'.
通信
这是 "sudo netstat -tulpn | grep postgres" 在 db VM
上的输出
tcp 0 0 0.0.0.0:5432 0.0.0.0:* 收听 5743/postgres
tcp6 0 0 :::5432 :::* 听 5743/postgres
将 localhost
更改为托管 VM 的计算机的 IP(您从 host[=16= 为 guests 设置了端口转发]).或者使用 bridged networking 并直接从客户端连接到服务器。
我正在尝试使用 Virtualbox 和 Vagrant 构建虚拟环境。 目标是能够从 pc 浏览器访问虚拟机 'server' 上与虚拟机 'db'.
交互的应用程序 运行我成功创建了虚拟机。
第一个是 Apache Tomee 运行,我可以通过浏览器访问它。它工作正常。
第二个是 Postgres 运行,我可以通过浏览器访问它。它也能正常工作。
当我尝试将 VM 'server' 与 'db' 连接时,出现 http 500 错误(仅当我尝试对应用程序进行某些数据库操作时),特别是:
"Connection to localhost:2222 refused. Check that the hostname and port
are correct and that the postmaster is accepting TCP/IP connections.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)"
我从 pc 浏览器测试了这两台机器,它们工作正常(事实上,在 db 机器上我看到添加了对象)。
这是 Vagrantfile:
config.vm.define "server" do |node|
node.vm.hostname = "server"
node.vm.network "private_network", ip: "10.12.1.101", virtualbox__intnet: true
[...]
node.vm.network "forwarded_port", guest: 22, host: 2211, id: 'ssh', auto_correct: true
node.vm.network "forwarded_port", guest: 8080, host: 2212
node.ssh.forward_agent = true
[...]
end
config.vm.define "client" do |node|
node.vm.hostname = "client"
node.vm.network "private_network", ip: "10.12.1.201", virtualbox__intnet: true
[...]
node.vm.network "forwarded_port", guest: 22, host: 2221, id: 'ssh', auto_correct: true
node.vm.network "forwarded_port", guest: 5432, host: 2222
end
在 apache-tomee/conf 中的文件 tomee.xml 中,我为测试中使用的数据库连接指定了相同的代码(在虚拟环境中可以正常工作)
<tomee>
<Resource id="PostgreSQL Database" type="DataSource">
JdbcDriver org.postgresql.Driver
JdbcUrl jdbc:postgresql://localhost:2222/music
UserName postgres
Password postgres
JtaManaged true
DefaultAutoCommit false
</Resource>
</tomee>
在 db VM 上我修改了 postgresql.conf 和 pg_hba.conf 添加
listen_addresses = '*'
第一个和
host all all 0.0.0.0/0 md5
在第二个。我不明白为什么当 tomee 在我的电脑上 运行 我可以访问两个 VM,但是 'server' 无法与 'db'.
通信这是 "sudo netstat -tulpn | grep postgres" 在 db VM
上的输出tcp 0 0 0.0.0.0:5432 0.0.0.0:* 收听 5743/postgres
tcp6 0 0 :::5432 :::* 听 5743/postgres
将 localhost
更改为托管 VM 的计算机的 IP(您从 host[=16= 为 guests 设置了端口转发]).或者使用 bridged networking 并直接从客户端连接到服务器。