【问题标题】:How to connect two VM (postgreSQL and tomee) using Vagrant?如何使用 Vagrant 连接两个 VM(postgreSQL 和 tomee)?
【发布时间】:2016-04-23 13:41:02
【问题描述】:

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

我设法创建了虚拟机。

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

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

当我尝试将 VM 'server' 与 'db' 连接时,我收到 http 500 错误(仅当我尝试对应用程序进行一些 db 操作时),特别是:

"连接到 localhost:2222 被拒绝。检查主机名和端口
 是正确的,并且 postmaster 正在接受 TCP/IP 连接。 
 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,但“服务器”无法与“数据库”通信。

这是 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

【问题讨论】:

    标签: java linux postgresql vagrant apache-tomee


    【解决方案1】:

    localhost 更改为托管VM 的机器的IP(您有来自hostguests 端口转发)。或者使用bridged networking直接从客户端连接到服务器。

    【讨论】:

    • 我尝试过这样做,但错误或多或少相同。 (如果您参考 tomee.xml 文件)。 >“连接到 10.12.1.201:2222 被拒绝。检查主机名和端口
    • 如果直接连接guest,使用真实端口;转发端口用于连接到 host(运行您的 virtualbox 的机器)。
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多