TL;DR:如何在我的容器中获取客户端以与主机上的服务建立 HTTPS 连接?
我在本地开发机器 (macOS) 的 VM 上运行了一项服务,该服务在端口 8443 上提供 HTTPS;它有一个证书dev.mycoolproject.com并dev.mycoolproject.com有一个A指向 127.0.0.1的记录。因此,如果我在本地计算机上运行我的客户端并将其指向它,https://dev.mycoolproject.com:8443则会与我的本地服务建立安全连接。
我想在 docker 容器中运行我的客户端,并且仍然让它连接到主机上的本地服务器。但显然dev.mycoolproject.com指向 127.0.0.1 是行不通的,我不能仅仅/etc/hosts用来重定向它,因为主机的 IP 是动态的。我可以在 访问本地服务器host.docker.internal:8443,但我会收到 TLS 错误,因为主机名不匹配。
有什么办法可以让docker的DNS映射dev.mycoolproject.com到主机IP?我研究了在容器中本地运行 dnsmasq 但我无法让它工作。
dpr*_*dpr 10
在容器中,您可能无法访问dig或 等工具nslookup,并且不想安装另一个 55MB 软件包(例如 debian 的 dnsutils)只是为了获取 IP,host.docker.internal最好使用getent以下命令dig:
getent hosts host.docker.internal | awk '{ print $1 }'
Run Code Online (Sandbox Code Playgroud)
我昨天遇到了类似的问题,并想出了一个解决方法,添加一个条目来/etc/hosts解析主机 IP。
您需要dig或其他 DNS 工具来查询 IP。
如果您以 root 身份运行,您可以使用:
echo "$(dig +short host.docker.internal) dev.mycoolproject.com" >> /etc/hosts
Run Code Online (Sandbox Code Playgroud)
如果你有 sudo 你可以运行:
echo "$(dig +short host.docker.internal) dev.mycoolproject.com" | sudo tee -a /etc/hosts
Run Code Online (Sandbox Code Playgroud)
最初我希望--add-host运行选项允许在主机 ip 参数中使用特殊的 docker 条目(如host.docker.internal),但不幸的是他们不允许。
我想避免更多的容器配置,所以我选择了这个。设置dnsmasq将是一个更稳定的解决方案。
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |