docker发布项目的一些坑

 

使用docker发布应用分为两种方式

1.使用源码直接发布:在创建项目的时候,vs会自动生成一个叫Dockerfile 的文件,我们一般会根据这个文件来制作镜像,然后将镜像运行在docker容器中。Dockerfile 如下所示

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["xxx.Admin.Web/United.Admin.Web.csproj", "xxx.Admin.Web/"]
COPY ["xxx.WebCommon/United.WebCommon.csproj", "xxx.WebCommon/"]
COPY ["Company.Framework/Company.Framework.csproj", "Company.Framework/"]
COPY ["Company.Domain/Company.Domain.csproj", "Company.Domain/"]
COPY ["Company.Application.Shared/Company.Application.Shared.csproj", "Company.Application.Shared/"]
COPY ["Company.Application.Admin/Company.Application.Admin.csproj", "Company.Application.Admin/"]
RUN dotnet restore "United.Admin.Web/United.Admin.Web.csproj"
COPY . .
WORKDIR "/src/xxx.Admin.Web"
RUN dotnet build "xxx.Admin.Web.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "xxx.Admin.Web.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "xxx.HealthWeb.dll"]

从以上代码上可知,Dockerfile 指定了.netcore 的SDK和Runtime的版本镜像。开发80端口,指定工作目录 SRC  复制相关的类库到工作目录,然后对项目进行了还原,构建,发布,等三个动作,这三个动作做完以后  运行当前dll文件。这种方法虽然很爽,但是有坑有坑有坑。当我们进入了项目目录的时候,执行docker build 的时候,发现出问题了。。具体如何提示的我懒就不想截图的,大概报的错是dockerfile中的路径问题。。系统给我们生成的dockerfile  我们不要全信。里面的路径大多数是有问题的  大家使用的时候,一定要仔细核对。

 

2.在VS中发布后的项目做Docker镜像制作

  VS发布项目的步骤应该都很熟悉了,在VS发布后会生成一个名为publish文件夹,直接进入publish文件夹里执行命令 docker build 操作。但是Dockerfile 文件中会有相应的改变,之前的还原,构建,发布的三个动作已经在VS中完成。只需要执行即可  修改后的Dockerfile如下

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
ENV ASPNETCORE_URLS http://+:40461
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY . /publish
WORKDIR /publish
EXPOSE 40461
ENTRYPOINT ["dotnet", "xxx.HealthWeb.dll"]
 
注意:是文件夹是publish  工作目录就是publish   
posted @   远方的诗意  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示