我有一个演示应用程序,这是在码头托管。Docker的公开端口是80,应用程序在本地机器上运行良好,我可以在localhost:8888上看到我的应用程序的登录页。
Docker文件如下所示
FROM microsoft/aspnetcore:2.0
COPY dist /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "demoapp.dll"]每当我将"EXPOSE 80/tcp“行改为"EXPOSE 8080/tcp”,“expose5000/tcp”等,以暴露Docker容器的任何其他端口,如许多在线可用示例代码中给出的80,我无法在浏览器上运行我的应用程序。除80以外的任何端口都不工作。
我能够创建图像和创建容器的应用程序也。一切正常,但当我尝试在浏览器上运行应用程序时(localhost:8080/5000/9000等)应用程序登录页面未加载。
有什么建议吗?我是否需要进行一些与端口相关的配置,或者联系我的网络团队?或者我这里遗漏的任何代码?
发布于 2019-06-18 20:14:06
您应该能够公开容器内的任何端口。但是,您可以在容器启动期间在主机上发布公开的端口。这是通过docker run命令的-p标志完成的。
当您说您能够使用localhost:8888访问应用程序时,这意味着您已经使用-p 8888:80运行了docker run命令。这会将容器端口80作为端口8888发布到主机上。要使用任何其他端口,只需将docker run命令更改为-p 8888:<new exposed port>,这样就可以了。
有关更多信息,请参阅docker run命令帮助:https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/#publish-or-expose-port--p-expose
发布或公开端口(-p、-expose)
$ docker运行-p 127.0.0.1:80:8080 ubuntu bash
这会将容器的8080端口绑定到宿主机的127.0.0.1上的80端口。用户指南详细解释了如何在Docker中操作端口
发布于 2019-06-18 20:14:56
如果您的应用程序在端口运行,假设是8080,那么请确保在运行容器时进行端口映射。
docker run -itd -p 8080:8080 <image>
这会将主机的端口8080映射到容器内的端口8080上。(-p主机端口:容器端口)
如果你不想要端口映射,那么在host模式下运行docker容器。
docker run -itd --net=host <image>
在这种情况下,您容器使用主机网络,因此您的应用程序在其中运行的任何端口都应该公开。
发布于 2019-06-20 13:44:04
对于microsoft/aspnetcore,它将ASPNETCORE_URLS环境变量设置为http://+:80,这意味着如果您没有在应用程序中显式设置URL,例如通过Program.cs中的app.UseUrl,那么您的应用程序将侦听容器内的端口80。
如果您想更改默认的80端口,您需要在Program.cs中使用UseUrls,如下所示,并在dockerfile中使用EXPOSE 8080/tcp。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://+:8080")
.UseStartup<Startup>();或者,您需要像这样更改ASPNETCORE_URLS环境
FROM microsoft/aspnetcore:2.0
COPY dist /app
WORKDIR /app
EXPOSE 8080/tcp
ENV ASPNETCORE_URLS=http://+:8080
ENTRYPOINT ["dotnet", "demoapp.dll"]要运行的命令
docker run -it -p 8080:8080 mytesthttps://stackoverflow.com/questions/56648811
复制相似问题