【问题标题】:Unable to connect to service in a docker container无法连接到 docker 容器中的服务
【发布时间】:2021-08-21 17:24:45
【问题描述】:

我创建了一个基于 .net 5 的服务。这项服务在当地运作良好。我正在尝试将其放入 docker 容器中。但是我无法连接到它。服务正在使用为 8080 配置的 Kestrel 运行

我的 Dockerfile 相当简单

FROM mcr.microsoft.com/dotnet/aspnet:5.0 #msft image

COPY ./bin/debug/net5.0/ .        #local items

EXPOSE 8080
ENTRYPOINT [dotnet, myservice.dll]

用于运行服务的命令

docker run -it -p 8080:8080 myservice

我创建了一个图像,当我使用-it 标志运行上面的图像时,我可以看到服务已执行。在检查/导出容器时,我还可以看到生成了一些应用程序日志文件,表明服务正在成功运行。当我通过在容器内执行 curl 来运行 swagger 端点时,我确实得到了 swagger UI HTML 页面。

但是,当我从我的实际机器上运行它时,它似乎没有连接到任何端点。我已经使用-p 8080:8080 运行了图像,所以它应该在同一个端口上响应。我试过使用随机的本地端口映射,所以端口肯定不会被阻塞。

我还检查了在端口 8080 上运行另一个基于容器的服务,但我能够访问相同的,所以端口肯定没有被阻塞。

不确定我在这里缺少什么。设置非常简单,因为它只是一个虚拟服务,用于使用一个 swagger 端点和另一个带有 .net 模板的天气预报端点进行测试。

【问题讨论】:

  • 确保在执行run 后没有在 bash 窗口中键入exit。或者更好的是,尝试在没有-it 标志的情况下运行您的图像,然后尝试访问它。进入 bash 窗口后,您可能会从那里退出,从而终止容器。此外,在尝试从您的机器访问时,首先运行 docker ps 并检查您的容器是否正在运行。
  • @LUC1F3R,感谢您的回复,但可以肯定的是我还没有退出并且容器正在运行。还尝试使用 docker UI 运行它,以确保相同的行为。
  • @semicolon :感谢您的建议。我解决了这个问题。服务配置被硬编码以监听本地主机,这就是导致问题的原因。现在将其切换到 0.0.0.0 并且有效。

标签: docker asp.net5


【解决方案1】:

默认情况下,容器将在端口 80 上进行内部侦听,除非您使用 ASPNETCORE_URLS 环境变量覆盖了该端口。 Docker 文件中的EXPOSE 除了记录打算使用的端口之外什么都不做。

尝试使用-p 8080:80 运行它,这会将本地机器上的端口 8080 映射到容器中的端口 80。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2020-06-13
    • 2017-06-02
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多