我想在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
的跨平台主机名 - 这是血腥的有帮助的。
答案 0 :(得分:1)
您可以尝试格式化docker info
:
https://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"}}'