我想在 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
- 这非常有帮助。
最佳答案
您可以尝试格式化 docker info
:
https://docs.docker.com/engine/reference/commandline/info/#format-the-output
docker info --format '{{json .}}'
docker info --format '{{json .path.to.ip}}'
例如在(单主机)Docker Swarm
中,您可以通过以下方式获取主机 ip:
docker info --format '{{json .Swarm.NodeAddr}}'
通过存储在变量中的命令替换:
docker_host_ip=$(docker info --format '{{json .Swarm.NodeAddr}}')
如果没有 Swarm,我无法在 Windows 或 Docker 上尝试它...但是 docker info
应该可以跨平台工作。
更新(根据下面的评论):
不是真的(语法上)“漂亮”你可以使用 --format {{index path arrayIndex "Key"}}
和 docker network inspect
并访问数组的第一个元素(index 0
) 然后通过其键 ("Gateway"
) 访问此数组中的 map :
docker network inspect docker_dockernet --format '{{index .IPAM.Config 0 "Gateway"}}'
关于windows - 如何在 docker-compose.yml 中包含 Docker 主机的 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47140065/