java – 如何使用Vagrant连接两个VM(postgreSQL和tomee)?

我正在尝试使用Virtualbox和Vagrant构建虚拟环境.目标是能够从PC浏览器访问在虚拟机“服务器”上运行的应用程序,该应用程序与虚拟机“db”交互.我设法创建了虚拟机.第一个是运行Apache Tomee,我可以通过浏览器访问...

我正在尝试使用Virtualbox和Vagrant构建虚拟环境.
目标是能够从PC浏览器访问在虚拟机“服务器”上运行的应用程序,该应用程序与虚拟机“db”交互.

我设法创建了虚拟机.

第一个是运行Apache Tomee,我可以通过浏览器访问它.它工作正常.

第二个是Postgres运行,我可以通过我的浏览器访问它.它也正常工作.

当我尝试将VM’服务器’与’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

在第二.我不明白为什么当我在我的电脑上运行时,我可以访问两个虚拟机,但“服务器”无法与“数据库”通信.

这是db VM上“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

解决方法:

将localhost更改为托管VM的计算机的IP(您已从主机为guest虚拟机转发端口).或者使用bridged networking并直接从客户端连接到服务器.

本文标题为:java – 如何使用Vagrant连接两个VM(postgreSQL和tomee)?

基础教程推荐