docker中运行.NET
使用docker部署asp.net core 到服务器
asp.net core在docker中部署到服务器
- 在包含 Dockerfile 和您的 .NET 项目的目录中打开命令行。
- 运行
docker build -t personalblog .来构建镜像。 - 运行
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