【发布时间】:2020-02-21 14:13:55
【问题描述】:
.Net Core 版本:3.1 操作系统:Windows 10 (1903) Docker 版本:19.03.5
嗨
我正在对 docker 和 .Net Core 进行我的第一个概念验证,以便研究将我们所有的基础设施转移到 .Net Core 的 docker 中的可能性。我试图构建一个简单的 http 监听器,它会返回一个 hello world 页面。 我发现了问题 https://github.com/dotnet/core/issues/3072 很有帮助。
简而言之,我正在尝试打开两个 http 侦听器: http://+:1234 https://+:12345
为此,主机操作系统上有两个 URL ACL 保留:
Reserved URL : http://+:1234/
User: \Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
Reserved URL : https://+:12345/
User: \Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
还有适用于 https 端口的有效证书:
SSL 证书绑定:
IP:port : 0.0.0.0:12345
Certificate Hash : a05077849c0835b0db2b16656cd42651122f283d
Application ID : {00000000-0000-0000-0000-000000000000}
...
进一步将两个端口转发到容器:
docker run --user ContainerAdministrator -p 1234:1234 -p 12345:12345 --name=https_container https_server_image
并且容器在 ContainerAdministrator 下运行。
HttpListener 在 http 端口上运行良好。 例如尝试加载“http://localhost:1234/”工作正常(示例代码只返回“Hello word”html 页面)。 尝试访问“https://localhost:12345/”上的 SSL 连接在 Chrome/Edge 中的“ERR_CONNECTION_RESET”、Mozilla 中的“PR_CONNECT_RESET_ERROR”浏览器中失败。
有趣的是,两个 HttpListener 实例在容器中启动都没有问题,也没有任何异常。 当然,相同的测试应用程序在没有 docker 容器化的情况下直接在主机上启动时就像一个魅力。
所以我想知道我在这里错过了什么吗? 这是预期的行为吗? 提前感谢您的帮助!
【问题讨论】: