You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6.0 Linux Docker容器无暴露端口问题求助

.NET Core 6.0 Linux容器端口无法访问修复方案

问题根源

  1. 端口暴露声明位置错误:EXPOSE 7101写在了build阶段,而最终运行的是runtime阶段生成的镜像,导致镜像没有端口暴露信息。
  2. 启动命令逻辑混乱:ENTRYPOINT用dotnet /app/CateringApp.dll,CMD却写了./CateringApp --urls ...,组合后实际执行的是dotnet /app/CateringApp.dll ./CateringApp --urls ...,不符合.NET应用启动逻辑,应用根本没监听指定端口。
  3. 本地发布与Docker内发布重复:Windows本地提前发布的linux-x64版本,和Dockerfile内的SDK发布步骤重复,容易引发环境不一致。

修正后的Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
# Docker内直接指定linux-x64发布,无需本地提前操作
RUN dotnet publish -c Release -r linux-x64 --self-contained false -o /app/published-app

FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
# 将EXPOSE移到runtime阶段,让镜像包含端口暴露信息
EXPOSE 7101
COPY --from=build /app/published-app /app
# 修正启动命令:直接用dotnet运行dll,参数指定监听地址
ENTRYPOINT ["dotnet", "CateringApp.dll"]
CMD ["--urls", "http://0.0.0.0:7101"]

操作步骤

  1. 删除本地提前发布的./CateringApp\bin\Debug\net6.0\linux-x64\publish目录,避免冗余文件干扰构建。
  2. 重新构建镜像:docker build . -t backendapi
  3. 启动容器时必须映射端口,否则localhost无法访问:docker run -p 7101:7101 backendapi

补充说明

  • 确保项目代码没有硬编码监听127.0.0.1,通过--urls指定0.0.0.0才能让外部访问容器内服务。
  • 用Release模式发布比Debug模式更适合生产环境,还能减少镜像体积。

内容的提问来源于stack exchange,提问作者Venoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:55:24