无法连接到 docker 容器中的服务

时间:2021-06-03 15:06:29

标签: docker asp.net5

我创建了一个基于 .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 上运行另一个基于容器的服务,但我能够访问相同的服务,因此端口肯定没有被阻止。

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

1 个答案:

答案 0 :(得分:0)

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

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