【发布时间】:2013-03-07 10:35:50
【问题描述】:
Oracle NoSQL 是一个应该托管在 Linux 上的数据库,所以我有一个在 Oracle VM VirtualBox 中运行的虚拟 Ubuntu。我的主机运行的是 Windows 7。
我已经建立了一个桥接连接,而且我绝对能够在两者之间进行通信。随着数据库在两台机器上运行,我可以通过网络浏览器连接到另一台机器的管理控制台,该控制台在端口 5001 上运行。我可以使用我们网络上机器的 IP 地址或其网络名称以这种方式进行连接。
我可以从两台机器上连接到该机器的数据库,并使用 IP 地址或网络名称从 java 程序中使用该数据库。
在虚拟机中,我可以使用网络名称连接并使用我的 PC 的 kvstore,但我使用 IP 地址得到了 socketTimeoutException。我相信这是由于 kvstore 的限制。
在我的电脑上,我无法使用网络名称或 IP 地址连接和使用虚拟机的 kvstore。当我尝试使用虚拟机的网络名称进行连接时,我得到以下堆栈跟踪:
Exception in thread "main" oracle.kv.FaultException: Could not contact any RepNode at: [pc30129vm:5000] (11.2.2.0.26)
Fault class name: oracle.kv.KVStoreException
at oracle.kv.KVStoreFactory.getStore(KVStoreFactory.java:123)
at nosql.Test.main(Test.java:18)
Caused by: oracle.kv.KVStoreException: Could not contact any RepNode at: [pc30129vm:5000]
at oracle.kv.impl.util.TopologyLocator.getInitialTopology(TopologyLocator.java:226)
at oracle.kv.impl.util.TopologyLocator.get(TopologyLocator.java:85)
at oracle.kv.impl.api.RequestDispatcherImpl.<init>(RequestDispatcherImpl.java:285)
at oracle.kv.KVStoreFactory.getStore(KVStoreFactory.java:118)
... 1 more
Caused by: java.rmi.ConnectIOException: Exception creating connection to: pc30129vm; nested exception is:
java.net.SocketTimeoutException: connect timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:632)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
at sun.rmi.registry.RegistryImpl_Stub.list(Unknown Source)
at oracle.kv.impl.util.TopologyLocator.getInitialTopology(TopologyLocator.java:175)
... 4 more
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at oracle.kv.impl.util.registry.ClientSocketFactory.createSocket(ClientSocketFactory.java:300)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 9 more
我尝试在虚拟机的那个端口上运行 Nmap,结果似乎恢复正常。使用 nmap 命令:
nmap -p 5000 pc30129vm
我得到了结果:
Starting Nmap 6.25 ( http://nmap.org ) at 2013-03-18 14:51 Pacific Daylight Time
Nmap scan report for pc30129vm (192.168.0.25)
Host is up (0.0030s latency).
PORT STATE SERVICE
5000/tcp filtered upnp
MAC Address: 08:00:27:44:A1:10 (Cadmus Computer Systems)
Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds
我只是想不通为什么我无法连接和使用虚拟机的数据库。使用运行 linux 的同事的笔记本电脑,我什至能够连接,但出于某种原因,虚拟机似乎阻碍了我的努力。
【问题讨论】:
-
nmapSTATE 列中的“已过滤”是什么意思? :) -
我实际上不知道,但 nmap.org 告诉我这意味着
Nmap cannot determine whether the port is open because packet filtering prevents its probes from reaching the port. The filtering could be from a dedicated firewall device, router rules, or host-based firewall software. -
是的,您很可能有防火墙阻止您访问该端口。防火墙可能会保护服务器并拒绝与它的传入连接,或者它可能会阻止来自您计算机的传出连接——或两者兼而有之,最坏的情况。
-
当您实际可以访问某个端口时,
nmap在 STATE 列中报告“打开”。 -
嗯......你是对的。我以为我已经永久关闭了那个愚蠢的防火墙,但是当我重新启动虚拟机时它又重新打开了!谢谢。您可以将您的回复放在答案中,如果您愿意,我会接受。
标签: java linux virtual-machine