我在Windows机器上创建了一个Oracle Linux VM(ipAddr 192.168.10.2)。
在这个VM上,我进一步创建了一个kvlite docker容器。
在Dockerfile中,以下是CMD发布:
CMD ["java", "-jar", "lib/kvstore.jar", "kvlite"]
创建了kvlite docker容器后,我在我的VM上运行了以下命令:
$ docker run --name nosql-container -d kvlite:latest
$ docker exec -it nosql-container bash
在容器bash提示符下,我尝试使用以下命令 ping我的客户端(但使用VM IpAddress而不是localhost):
# java -jar lib/kvstore.jar ping -port 5000 -host 192.168.10.2
然而,这会引发异常
拿起_JAVA_OPTIONS:-Djava.security.egd = file:/ dev /./ urandom
无法连接到192.168.10.2:5000的注册表无法连接到主机192.168.10.2,端口5000的存储节点代理程序, 可能没有运行;嵌套异常是:
java.rmi.ConnectException:Connection拒绝主机:192.168.10.2;嵌套异常是:
java.net.ConnectException:拒绝连接
无法找到商店拓扑:无法联系任何RepNode:[192.168.10.2:5000]
但是,当我使用-host
作为localhost
而不是
# java -jar lib/kvstore.jar ping -port 5000 -host localhost
要解决此问题,我尝试了以下操作:
我停止了我的kvlite docker容器
将值config.xml ($KVROOT/config.xml)
的{{1}}更改为hostname
重新启动我的kvlite docker容器,但这没有帮助,容器无法启动
接下来,我尝试为CMD下面的kvlite重新创建一个新的docker镜像:
IpAddress
但是当我尝试启动kvlite docker容器时,它也没有启动。
我甚至验证了我的CMD ["java", "-jar", "lib/kvstore.jar", "kvlite", "-host", "192.168.10.2", "-port", "5000"]
文件以输入IpAddress - /etc/hosts
。
提前获得任何帮助。
答案 0 :(得分:0)
Docker在VM上使用自己的虚拟网络。
默认网络终结器使用的IP范围为172.17.x.x,因此您启动的Container在该网络范围内拥有自己的IP。
在使用
登录Container后查找Container类型ifconfig
的IP
$ docker exec -it nosql-container bash
您可以使用Container IP从Container内部处理Container。
如果您想通过VM的IP从容器外部到达进程,则需要在启动docker容器时公开端口(使用 -p )。
$ docker run --name nosql-container -p 5000:5000 -d kvlite:latest
您可以找到有关Docker默认网络here的更多信息。
另一种方法是通过指定 - net = host 与您的容器共享WM网络。
$ docker run --name nosql-container --net=host -d kvlite:latest