1

我在我的 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 处的注册表 嵌套异常是:

java.rmi.ConnectException:连接拒绝主机:192.168.10.2;嵌套异常是:

java.net.ConnectException:连接被拒绝

找不到存储拓扑:无法联系任何 RepNode:[192.168.10.2:5000]

-host但是,当我改用as时,一切都很好localhost

# java -jar lib/kvstore.jar ping -port 5000 -host localhost

为了解决这个问题,我尝试了以下操作:

  • 我停止了我的 kvlite docker 容器

  • config.xml ($KVROOT/config.xml)将值更改hostnameIpAddress

  • 重新启动我的 kvlite docker 容器,但这没有帮助,容器无法启动

接下来,我尝试为在 CMD 下发出的 kvlite 重新创建一个新的 docker 映像:

CMD ["java", "-jar", "lib/kvstore.jar", "kvlite", "-host", "192.168.10.2", "-port", "5000"]

但是在这里,当我尝试启动 kvlite docker 容器时,它也没有启动。

我什至验证了我的/etc/hosts文件以输入 IpAddress- 192.168.10.2

提前感谢任何帮助。

4

1 回答 1

0

Docker 在 VM 上使用自己的虚拟网络。

docker 使用的默认网络 IP-Range 为 172.17.xx,因此您启动的 Container 在该网络范围内有自己的 IP。

ifconfig在登录 Container 后查找您的 Container 类型的 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 默认网络的更多信息。

另一种方法是通过指定--net=host与您的容器共享 WM 网络。

$ docker run --name nosql-container --net=host -d kvlite:latest
于 2016-10-23T15:27:37.070 回答