docker中运行.NET

使用docker部署asp.net core 到服务器

asp.net core在docker中部署到服务器

  1. 在包含 Dockerfile 和您的 .NET 项目的目录中打开命令行。
  2. 运行 docker build -t personalblog . 来构建镜像。
  3. 运行 docker run -d -p 5031:5031 -p 7031:7031 --name personalblogcontainer personalblog 来启动容器。

blog 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/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5031
EXPOSE 7031

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src

COPY . .

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENTRYPOINT ["dotnet", "Personalblog.dll"] 

当项目中指定端口的时候,可以直接运行 某些不指定情况会报错nginx 找不到

403 Forbidden
nginx

原因

在 ASP.NET Core 应用程序中,默认情况下,Kestrel 服务器会监听 http://localhost:5000(对于 IPv4)和 http://[::]:5000(对于 IPv6),除非您在配置中明确指定了其他地址和端口。但是,通常您不需要在应用程序的配置文件中指定这些地址,因为它们是 Kestrel 的默认行为。 

一.在项目中设置, 设置了未测试

二.直接在dockerfile中设置

docker build -t mydiary . docker run -d -p 5000:5000 --name mydiarycontainer mydiary

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5000

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src

COPY . .

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ENTRYPOINT ["dotnet", "diary.dll", "--urls", "http://*:5000"]

2.未测试

使用环境变量: 您还可以设置环境变量来配置 ASP.NET Core 应用程序的 URL。在 Dockerfile 中,您可以使用 ENV 指令来设置 ASPNETCORE_URLS 环境变量。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://*:5000
 
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /app
COPY --from=build /src/bin/Release/net6.0/publish .

ENTRYPOINT ["dotnet", "diary.dll"]

在这种情况下,您不需要修改 ENTRYPOINT 或 CMD,因为 ASP.NET Core 应用程序将在启动时自动读取 ASPNETCORE_URLS 环境变量。

我在宿主机目录opt/diary/wwwroot/music添加的文件,但是容器里面没有是不是应该把目录隐射过去

docker run -d -p 5000:5000 -v /opt/diary/wwwroot/music:/src/wwwroot/music -v /opt/diary/wwwroot/video:/src/wwwroot/video --name mydiarycontainer mydiary

因为WORKDIR /src 在src所以根目录对应的是容器中的的src