mac、mac m1 打包asp.net core成docker

在Mac m1上我用的是Rider写.net core项目,参照windows 上的VS2019上的Dockerfile另写一份配置记录一下
1.新建一个WebAPI的项目RTest
2.新建一个Dockerfile

# asp.net5 是我自己制作的一个镜像,用官方的也可以 mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
FROM asp.net5 AS base 
MAINTAINER zzz

WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
RUN mkdir -p /app/build
COPY RTest.csproj RTest/
RUN dotnet restore "RTest/RTest.csproj"
COPY . RTest/
WORKDIR "/src/RTest"
RUN dotnet build "RTest.csproj" -c Release -o /app/build

FROM build AS publish
RUN mkdir -p /app/publish && dotnet publish "RTest.csproj" -c Release -o /app/publish

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

3.build Dockerfile

docker build -t rtest . 

mac、mac m1 打包asp.net core成docker

4.run docker

docker run -p 9090:80 --name rtest -d rtest 

mac、mac m1 打包asp.net core成docker
可以在Docker Desktop 看到服务已经起来了
mac、mac m1 打包asp.net core成docker

5.在浏览器中输入http://localhost:9090/WeatherForecast
mac、mac m1 打包asp.net core成docker

6.注意事项
如果直接拿Visual Studio 上的Dockerfile来改的话,如果不注意路径的配置,有可能会出现:
error CS5001: Program does not contain a static 'Main' method suitable for an entry point [xxx.csproj]
这个错误
因为visual studio执行Dockerfile的方式是:

docker build -f Dockerfile ..

注意,后面是两个点,也就是在Dockerfile目录的上一层目录执行,所以Copy . .会把代码复制到错误的位置,导致编译的时候找不到cs文件,所以也找不到Main方法了

上一篇:Linux下bash: scp: command not found问题 或者装ssh包时报错 Requires: libedit.so.0()(64bit)


下一篇:Python学习第三十二课——ORM(多表查询,一对多)