我有一个示例helloworld asp.net核心MVC应用程序托管在linux docker中。泊坞窗图片基于
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
构建映像并在容器中运行映像后,我可以看到容器正在运行,并在Docker主机上监听8080端口。
但是我无法使用URL访问网站
http://192.168.0.100:8080
作为调试的一部分,我使用了来自docker主机(运行docker的Linux机器)上的curl来分析响应标头
从docker容器中得到了相同的响应(172.17.0.2是docker的IP
我想知道是否有防火墙阻止对8080端口的请求,以检查我是否拥有UFW的状态。
有人可以告诉我我想念的东西吗
更新1 :我将网站部署在docker外部,它工作正常,但由于在Kestrel中托管,因此无法在Linux外部访问。我安装了Nginx并配置为现在重新路由请求和网站,因为在Linux盒子之外也可以访问。
现在是因为应用程序本应托管在docker容器中的kestrel中,这也是为什么托管在该容器中时我无法访问该站点的原因。
答案 0 :(得分:1)
我认为您只是在容器中8080上使用的Kestrel(或Nginx)与主机的裸露端口(根据上述配置为80)之间存在不匹配。现在,我希望在Docker主机的两个端口80/8080上都获得一个404
,因为8080没有公开,并且80没有映射任何内容。
在配置容器时,您需要添加一个标志,例如--publish 80:8080
,它将容器中的TCP端口8080映射到Docker主机上的端口80。
查看the docs on published ports了解更多详细信息。
答案 1 :(得分:1)
我谨记,如果您尝试通过类似http://192.168.0.100:8080的网址访问您的应用,
您应该在 host 网络中运行容器(docker run ... --net host ...),如果可以的话。默认情况下,所有应用程序都在具有网状网络的容器中运行。实际上,您应该尝试通过容器ip:172.17.0.2或实际的容器ip访问(以查看有关网络运行shell docker