如何在docker-compose.yml中包含Docker主机的IP?

时间:2017-11-06 15:12:39

标签: windows docker environment-variables docker-compose

我想在PHP Docker容器中包含对Xdebug的支持,但是作为其中的一部分,我需要通过XDEBUG_CONFIG=remote_host=${HOST_IP}指定运行Docker容器的Windows机器的IP - 目前HOST_IP是在.env文件中手动指定,但我想自动执行此操作以减少其他用户的设置步骤。

我的问题是我似乎找不到轻松确定主机IP的方法。它还需要在Windows和Linux Docker主机上运行,​​因为并非所有用户都使用Windows作为其桌面环境。我也无法使用${HOSTNAME},因为这无法在DNS中解决。

有没有人对如何实现这一目标有任何建议?

EDIT2:为更新版本的Docker更新此答案:从18.03开始,Docker For Windows和其他Docker平台已更新为包含其Docker主机host.docker.internal的跨平台主机名 - 这是血腥的有帮助的。

1 个答案:

答案 0 :(得分:1)

您可以尝试格式化docker infohttps://docs.docker.com/engine/reference/commandline/info/#format-the-output

docker info --format '{{json .}}'
docker info --format '{{json .path.to.ip}}'

E.g。在(单主机)Docker Swarm中,您可以通过以下方式获取主机IP:

docker info --format '{{json .Swarm.NodeAddr}}'

通过命令子代存储在变量中:

docker_host_ip=$(docker info --format '{{json .Swarm.NodeAddr}}')

我无法在Windows上或没有Swarm的Docker上尝试...但docker info应该可以跨平台工作。

更新(根据以下评论):
不是(语法上)“漂亮”你可以将--format {{index path arrayIndex "Key"}}docker network inspect一起使用并访问数组的第一个元素(索引0),然后通过其键访问该数组中的映射( "Gateway"):

docker network inspect docker_dockernet --format '{{index .IPAM.Config 0 "Gateway"}}'