Docker多阶段构建Web应用暴露问题及命令执行求助
解决Docker镜像中Web站点无法通过localhost:8080访问的问题
嘿,我来帮你排查下这个问题!从你描述的情况来看,CMD能正常运行但访问不了站点,大概率是这几个地方出了问题,咱们一步步来解决:
1. 容器端口未做映射
你运行容器的时候,有没有把容器内的8080端口映射到宿主机的端口呀?如果没加端口映射参数,宿主机根本没法访问容器里的服务。运行容器的时候得这么写:
docker run -p 8080:8080 你的镜像名称
这里第一个8080是宿主机的端口,第二个是容器内Web服务监听的端口,得保证两者对应上。
2. Web服务绑定的地址不对
很多时候Web服务默认会绑定127.0.0.1,这个地址只有容器内部能访问,外部(包括宿主机)是连不上的。你得把Web服务的监听地址改成0.0.0.0,这样容器就能接收来自外部的请求了。
比如如果是ASP.NET Core的项目,你可以在Program.cs里修改:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls("http://0.0.0.0:8080") // 加上这行,指定监听地址和端口 .UseStartup<Startup>();
3. 确认容器内的Web服务真的在运行
虽然你说CMD能正常运行,但可以进容器里检查下服务状态。用这个命令进入容器:
docker exec -it 你的容器ID /bin/bash
然后用netstat -tulpn看看8080端口有没有被监听,或者直接在容器内部访问http://localhost:8080,确认服务本身是正常的。
4. 基础镜像的兼容性问题
你用的是microsoft/aspnetcore-build:2.0这个镜像,它是用来构建ASP.NET Core应用的,如果你是要跑Ubuntu+普通Web站点,可能换成纯Ubuntu镜像(比如ubuntu:latest)会更合适?当然如果你的项目就是ASP.NET Core的,那这个基础镜像是没问题的,重点还是前面的端口和绑定地址。
先试试这几个方法,应该能解决你的问题!
内容的提问来源于stack exchange,提问作者christopher clark
相关产品推荐
相关产品推荐

