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

标签 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 - 这非常有帮助。

最佳答案

您可以尝试格式化 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/

相关文章:

python - 是否有跨操作系统的标准方法将 "tags"添加到文件

python - 导入错误 : cannot import name Thread

laravel - 在 Laravel Mix 和 React 中使用 .env 常量

c - C 中的环境变量

bash - Ansible - 在剧本执行期间更新环境变量

windows - 在 Windows 7 上独立运行 AntlrWorks2

c++ - 如何将 IStream 实例中的数据读入 char 指针?

docker - docker 上的 repmgrd 和 supervisord - 失去 parent ?

.net - 带有 ASP.NET Core 库的 Docker 容器

powershell - 无法使用Powershell构建Docker镜像?