以下是Dockerfile, 这个比较重要, 直接关系到能不能正确生成image:
#多阶段构建的第一阶段, 直到一下个From段, 都是在此镜像的基础上进行的操作, AS build表示给这个阶段起个名为build, 这个名在后面的阶段可以使用, FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build WORKDIR /app COPY . /app WORKDIR /app/<ProjectName>
#以下这一行安装是为了解决我项目里的一个问题: System.DllNotFoundException: Unable to load shared library 'libdl' or one of its dependencies, https://github.com/dotnet/dotnet-docker/issues/618, 对别的项目也许可以忽略 RUN apt-get update && apt-get install -y --allow-unauthenticated libc6-dev libgdiplus libx11-dev && rm -rf /var/lib/apt/lists/* RUN dotnet restore #发布到当前目录的out文件夹下 RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime WORKDIR /app #--from=build就是上一个构建阶段. 这行表示把上个阶段的out文件夹下内容都copy到当前目录下 COPY --from=build /app/<ProjectName>/out ./ ENTRYPOINT ["dotnet", "<DllName>.dll"] #docker build -t <ImageName> . #docker run -d -p 62301:62301 -v "$(pwd)"/logs:/app/logs <ImageName> --urls="http://*:62301"
Dockerfile copy到centos上项目所在地, 然后跑:
docker build -t <ImageName> .
别忘了结尾的点号 "."
然后运行Image, 我是使用的62301端口跑站点, 日志文件夹使用一个Bind mounts放在项目所在目录下了:
docker run -d -p 62301:62301 -v "$(pwd)"/logs:/app/logs <ImageName> --urls="http://*:62301"
注意这样跑起来的站点是只支持http的, 因为没有证书.
然而我本地起的localhost的站点是只能https访问, http也会强制重定向到https, 使用的开发证书.