windows - 从 Windows 上的 Docker 容器中访问主机
问题描述
我在最新的 Windows 10 上使用 Docker CE for Windows,并使用脚本构建了一个映像,该脚本针对 Web 服务器运行测试。(确切地说,是 WebDAV 服务器的试金石测试套件,但我认为问题很普遍。)
我在 Powershell 控制台上运行 Web 服务器:
> wsgidav -p 8080 -H localhost
21:04:19.107 - <13348)> wsgidav INFO : Running WsgiDAV/3.0.0a3 Cheroot/6.4.0 Python/3.6.5
21:04:19.107 - <13348)> wsgidav INFO : Serving on http://localhost:8080 ...
从另一个 Powershell 控制台,我在 Docker 容器中运行我的脚本(使用 FROM alpine)。脚本启动并尝试访问端点,但没有成功:
> docker pull mar10/litmus
> docker run --rm -p 8080:8080 mar10/litmus http://gateway.docker.internal:8080
-> running `basic':
0. init.................. FAIL (connection refused by `gateway.docker.internal' port 8080: Operation timed out)
我试过到目前为止
- 使用
gateway.docker.internal
主机名 - 使用
-p PORT:PORT
- 使用
--net=host
- 重新启动 docker 守护进程(有趣的是,有时也需要修复超时
docker pull
) - Web 服务器的不同 IP 地址(127.0.0.1、localhost、0.0.0.0、本地 IP)
到目前为止没有任何效果(尽管失败消息可能不同)。也许我只是错过了上述的工作组合,或任何其他技巧?
解决方案
FWIW,我能够通过使用--network host
选项构建容器并使用客户端的真实 IP(而不是 localhost 或 0.0.0.0)来解决它。
推荐阅读
- c++ - 使用基类引用而不是指针时意外的虚函数调度
- android - 是否可以创建一个派生自 LinearSmoothScroller 的类,该类添加了一个属性以在覆盖方法之一中使用其值
- javascript - 为什么我的 POST 请求不更新正在服务的 .json 或 .js 文件?
- c# - Excel 版本未匹配异常
- java - 获取“无法捕获任务':compileJava'的输入文件的快照”
- c# - 不包含“ToPagedList”的定义
- javascript - Spring MVC 控制器所需的 JS 中创建的元素的值
- kdb - 如何从 kdb 表中按索引删除列?
- javascript - React 组件不会在 window.location 更改时重新渲染
- reactjs - SASS字体导入嵌套问题