0

我的机器上有一个容器。我的机器可以访问 xxx.net,但容器不能,除非我这样启动它:

docker run --add-host xxx.net:192.xxx.xxx.x -p 8080:8080 -d image_id

或者进入容器并在 /etc/hosts 文件中添加这一行:

192.xxx.xxx.x xxx.net

现在,如果这个地址 (192.xxx.xxx.x) 不会改变,这将不是问题,但不幸的是,它确实改变了。

可以做些什么吗?

4

2 回答 2

0

我在这里遗漏了一些细节

什么是xxx.net?主机看到该地址是因为它是由 DNS 解析还是它是 NAT 中其他计算机中的本地服务?我假设后者(容器应该可以访问主机 DNS)所以尝试使用 --network=host 运行 docker,看看是否有帮助(它将与主机共享同一个网络)

于 2019-10-23T10:54:36.397 回答
0

嗯,那是因为为了访问 VM,您使用的是 8080 端口。当您在机器上启动 docker 时,您需要公开您必须使用的任何端口。如果你的码头集装箱是一艘船,可以这样想。船里有水,你怎么把它弄掉?您需要将一个端口从船上暴露到海中,因为首先没有暴露任何端口。所以你不能连接到你的`VM,因为它没有一个端口来访问它。

您可以尝试做的是传递您的主机名,然后从 Dockerfile 中编辑文件?所以当你的docker被创建时,它已经有主机了/etc/hosts

编辑:如果地址发生变化,这是什么平台?如果使用云平台,您可以为该服务保留静态 IP 地址吗?

我在使用 Filestore 时遇到了类似的问题。如果重新启动,IP会改变。然后我所做的是查询 API 以获取 IP 地址,因为它是我的 GCP 项目中唯一的文件存储,所以还不错。

这是什么IP地址?比如,什么服务,在什么平台上。无论如何,您是否可以在不手动获取IP地址的情况下获取它?

于 2019-10-23T09:18:24.820 回答