程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了.net 项目的 docker build 完成后如何启动多个微服务?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决.net 项目的 docker build 完成后如何启动多个微服务??

开发过程中遇到.net 项目的 docker build 完成后如何启动多个微服务?的问题如何解决?下面主要结合日常开发的经验,给出你关于.net 项目的 docker build 完成后如何启动多个微服务?的解决方法建议,希望对你解决.net 项目的 docker build 完成后如何启动多个微服务?有所启发或帮助;

我有一个 .net 解决方案,它有 2 个项目,每个项目都是一个微服务(一个服务器)。我有一个 dockerfile,它首先安装两个项目使用的所有依赖项。然后我发布解决方案:

    FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
    workdir /app
    
    # copy csproj and restore as disTinct layers
    copY *.sln .
    copY Server/*.csproj ./Server/
    copY JobRunner/*.csproj ./JobRunner/
    RUN dotnet restore ./MySolution.sln
    
    # copy everything else and build
    copY . ./
    RUN dotnet publish -c Release -o out
    
    # Build runtime image
    FROM mcr.microsoft.com/dotnet/aspnet:5.0
    workdir /app
    copY --from=build /app/out .
    ENTRYPOINT ["dotnet","Server.dll"]

发布解决方案后,有 2 个可执行文件可用:Server.dllJobRunner.dll。但是,我只能在 Dockerfile 中启动其中之一。

这似乎很浪费,因为恢复解决方案是 ServerJobRunner 项目的常见步骤。此外,这行 RUN dotnet publish -c Release -o out 生成了 ServerJobRunner 的可执行文件。我可以为每个项目编写一个单独的 Dockerfile,但这似乎是多余的,因为每个项目 99% 的构建步骤都是相同的。

有没有办法在不使用脚本的情况下以某种方式从单个文件启动 2 个可执行文件(我不希望这两个服务都在单个容器中启动)?我发现的最接近的是 docker build 中的 --target option 但它可能不起作用,因为我需要多个入口点。

解决方法

在您的 Dockerfile 中,将最后一行的 ENTRYPOINT 更改为 CMD

执行此操作后,只需在 docker run 命令中的图像名称后提供备用命令即可覆盖该命令:

docker run ... my-image \
  dotnet JobRunner.dll

(原则上您可以在不更改 Dockerfile 的情况下执行此操作,但是 docker run 的构造很笨拙,在这里使用 ENTRYPOINT 没有特别的好处。如果您使用的是 Docker Compose,则可以在逐个容器的基础上覆盖 entrypoint:command:。)

大佬总结

以上是大佬教程为你收集整理的.net 项目的 docker build 完成后如何启动多个微服务?全部内容,希望文章能够帮你解决.net 项目的 docker build 完成后如何启动多个微服务?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。