【发布时间】: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 并且有效。