【问题标题】:How can I make a request coming from inside of a docker container appear to be coming from my local machine?如何使来自 docker 容器内部的请求看起来来自我的本地计算机?
【发布时间】:2019-04-05 19:27:56
【问题描述】:

在 docker 容器中运行的浏览器需要对在我们网络中的测试 API 上运行的登录服务进行 POST。该服务对 POST 的来源非常挑剔,因此它拒绝 POST,因为它来自 host.docker.internal 而不是 localhost.company.com

我不太可能将host.docker.internal 添加到白名单中。

如果浏览器在我的本地计算机上运行,​​POST 将正常工作,但当浏览器在我本地计算机上的容器内运行时失败。

我试过docker run --add-host='localhost.mycompany.com:127.0.0.1'docker run --add-host='localhost:127.0.0.1',都没有成功。后者似乎很愚蠢;这有点像在黑暗中拍摄......

一个可能的更复杂的情况是:浏览器在 Docker 容器内的 testcafe 中运行,所以我的请求会有像 'Origin: http://172.17.0.2:1337' 'Referer: http://172.17.0.2:1337/WBrtZV38p/http://host.docker.internal:3000/app/' 这样的标题

没有在我的本地机器上制作某种代理,有没有办法让来自 docker 容器的 POST 看起来来自我的本地机器?

【问题讨论】:

标签: docker automated-tests e2e-testing web-testing testcafe


【解决方案1】:

使用docker run --network host ... 在主机操作系统网络空间中启动容器 - 容器将直接在本地计算机的网络中运行。但是你会失去容器网络隔离,所以你应该检查这种方法的安全性。

文档:https://docs.docker.com/network/host/

【讨论】:

  • 嗯,这可能有效,但它似乎破坏了我的调试端口docker run --network='host' --expose 9230 -p 9230:9230 --expose 9222 -p 9222:9222 -e NODE_OPTIONS="--inspect=0.0.0.0:9230" - 你知道如何解决这个问题吗?它没有修复我的测试,所以我需要调试并弄清楚标题是什么样的
  • 不要发布(暴露)任何端口 - 您已经在主机操作系统网络中运行。
  • 是的,但是测试仍然失败,我需要调试主机中运行的浏览器来解决问题。 Chromium 允许使用 --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222 但如果我不能公开这些端口......我认为节点进程会正常显示(就像调试模式下的任何其他节点进程一样)但它不是
  • 发布容器端口 = 将容器网络空间的端口转发到宿主机os网络空间。但是使用--network host,您已经在主机操作系统网络空间中启动容器,并且应用程序正在绑定主机操作系统网络接口。所以在你的本地主机操作系统接口上调试。
猜你喜欢
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多