我正在尝试使用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:
在 apache-tomee/conf 目录下的 tomee.xml 文件中,我指定了与测试中使用的数据库连接代码相同的代码(在虚拟环境之外正常工作)。
在db虚拟机上,我修改了postgresql.conf和pg_hba.conf文件,添加了以下内容:
我成功创建了这两个虚拟机。第一个虚拟机正在运行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虚拟机上,我修改了postgresql.conf和pg_hba.conf文件,添加了以下内容:
第一个文件中添加:
listen_addresses = '*'
第二个文件中添加:
host all all 0.0.0.0/0 md5
我不明白为什么当tomee在我的电脑上运行时,我可以访问两个虚拟机,但是“server”无法与“db”通信。
这是在db虚拟机上运行“sudo netstat -tulpn | grep postgres”的输出结果:
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 5743/postgres
tcp6 0 0 :::5432 :::* LISTEN 5743/postgres