正在获取Docker主机的IPv4地址

正在获取Docker主机的IPv4地址,docker,networking,Docker,Networking,我有一个应用程序在Docker容器中运行。此应用程序在其API中公开了一些资源。这些资源必须公开其完整URL,包括方案、主机、端口和路径 从容器内部看,我的IP地址(主机)似乎是172.17.0.2。这可能是因为容器是内部Docker网络的一部分 但是,主机有一个IP为192.168.1.*的eth0设备,这就是我想知道并包含在url中的设备 我知道我可以在创建容器并将其作为环境变量传递时对其进行评估,但如果Docker主机IP地址发生更改,则最好使用不涉及重新创建容器的解决方案 我知道我可以在

我有一个应用程序在Docker容器中运行。此应用程序在其API中公开了一些资源。这些资源必须公开其完整URL,包括方案、主机、端口和路径

从容器内部看,我的IP地址(主机)似乎是
172.17.0.2
。这可能是因为容器是内部Docker网络的一部分

但是,主机有一个IP为192.168.1.*的
eth0
设备,这就是我想知道并包含在url中的设备

我知道我可以在创建容器并将其作为环境变量传递时对其进行评估,但如果Docker主机IP地址发生更改,则最好使用不涉及重新创建容器的解决方案


我知道我可以在主机上设置一个服务,定期将IP地址写入一个卷,然后从卷中读取,但是我希望容器外的移动部件尽可能少。

使用
--net=host
启动docker容器,您主机的所有接口都可以从容器中访问,当然,你的192.168.1.X.

更清楚地说明:你是否必须在容器中“创建”类似于
docker\u host\u ip/path的URL?(
docker\u host\u ip
这里指的是您提到的
192.168.1.*
这是正确的。我知道我可以在我的应用程序中的HTTP请求期间获取它们,但这也是一个很好的解决方案,可以在后台作业中工作。您是否正在尝试访问主机上运行的服务?如果是这种情况,您的主机将默认docker网桥网络(
docker 0
)与IP
172.17.0.1
,这可能有助于您访问主机上运行的任何服务。问题是“…这是我想知道并包含在url中的IP”。我的理解是,需要在URL中包含docker主机IP。仅使用
--net=host
如何解决这个问题?还没有尝试过,但我想我应该能够在我的应用程序中迭代网络接口并找到正确的接口。@tgogos,它可以工作,因为使用
--net=host
,容器将主机的配置映射到它的主机。如果您执行
docker exec-ti bash
并执行
ifconfig
,您将看到与外部docker内部IP相同的接口。但是,应该指出的是,使用
--net=host
时,docker可以提供的网络隔离被删除,并且您的容器与主机共享相同的网络堆栈。