Docker构建镜像时本地NuGet不存在的解决方式

2024-08-31 15:28

本文主要是介绍Docker构建镜像时本地NuGet不存在的解决方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在打包镜像时,由于程序中使用了本地的NuGet包,发现怎么打包都是失败,错误如下
在这里插入图片描述
我的dockerfile 文件如下

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80# 此阶段用于生成服务项目
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build 
ARG BUILD_CONFIGURATION=Release
WORKDIR /srcCOPY ["src/YiAim.Shop.Web/YiAim.Shop.Web.csproj", "src/YiAim.Shop.Web/"]
COPY ["src/YiAim.Shop.Application/YiAim.Shop.Application.csproj", "src/YiAim.Shop.Application/"]
xxx
COPY ["src/YiAim.Shop.HttpApi/YiAim.Shop.HttpApi.csproj", "src/YiAim.Shop.HttpApi/"]
COPY ["src/YiAim.Shop.EntityFrameworkCore/YiAim.Shop.EntityFrameworkCore.csproj", "src/YiAim.Shop.EntityFrameworkCore/"]
RUN dotnet restore "src/YiAim.Shop.Web/YiAim.Shop.Web.csproj" 
COPY . .
WORKDIR "/src/src/YiAim.Shop.Web"
RUN dotnet build "YiAim.Shop.Web.csproj" -c Release -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "YiAim.Shop.Web.csproj" -c Release -o /app/publish /p:UseAppHost=falseFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YiAim.Shop.Web.dll"]

无法找到本地引用的NuGet包
解决方案
1、将本地NuGet网络化(有点麻烦)
2、将本地NuGet包加入打包环境

本地NuGet包加入打包环境,搞了好久才弄明白~~

  • NuGet.Config 文件中,配置的NuGet 源(没有这个文件新建即可,NuGet.Config 文件与 .sln 文件同一文件夹中)
<?xml version="1.0" encoding="utf-8"?>
<configuration><packageSources><add key="local" value="./Nupkg" />
</packageSources>
</configuration>
  • 在dockerfile 文件中加入相关配置
# NuGet.Config里面要声明本地NuGet包的所在位置(使用相对路径) 
COPY ./NuGet.Config .
# 复制本地的Nupkg包,加入编译环境,不然找不到本地包会报错 ./Nupkg/==/src/Nupkg/
COPY ./Nupkg ./Nupkg/
# 添加nuget本地来源
RUN dotnet nuget add source /src/Nupkg/

ps:本地的包注意存放的位置,我就是在这里花费了好多时间

可以参考我这,完整的dockerfile 与目录,灵活配置

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build 
ARG BUILD_CONFIGURATION=Release
WORKDIR /src# NuGet.Config里面要声明本地NuGet包的所在位置(使用相对路径) 
COPY ./NuGet.Config .
# 复制本地的Nupkg包,不然找不到本地包会报错 ./Nupkg/==/src/Nupkg/ (WORKDIR /src已经设置了基本路径)
COPY ./Nupkg ./Nupkg/
# 添加nuget本地来源
RUN dotnet nuget add source /src/Nupkg/COPY ["src/YiAim.Shop.Web/YiAim.Shop.Web.csproj", "src/YiAim.Shop.Web/"]
COPY ["src/YiAim.Shop.Application/YiAim.Shop.Application.csproj", "src/YiAim.Shop.Application/"]
COPY ["src/YiAim.Shop.Auth/YiAim.Shop.Auth.csproj", "src/YiAim.Shop.Auth/"]
COPY ["src/YiAim.Shop.Domain.Shared/YiAim.Shop.Domain.Shared.csproj", "src/YiAim.Shop.Domain.Shared/"]
COPY ["src/YiAim.Shop.Domain/YiAim.Shop.Domain.csproj", "src/YiAim.Shop.Domain/"]
COPY ["src/YiAim.Shop.Application.Contracts/YiAim.Shop.Application.Contracts.csproj", "src/YiAim.Shop.Application.Contracts/"]
COPY ["src/YiAim.Shop.Virtually.Recharge/YiAim.Shop.Virtually.Recharge.csproj", "src/YiAim.Shop.Virtually.Recharge/"]
COPY ["src/YiAim.Shop.Wechat/YiAim.Shop.Wechat.csproj", "src/YiAim.Shop.Wechat/"]
COPY ["src/YiAim.Shop.HttpApi.Admin/YiAim.Shop.HttpApi.Admin.csproj", "src/YiAim.Shop.HttpApi.Admin/"]
COPY ["src/YiAim.Shop.HttpApi/YiAim.Shop.HttpApi.csproj", "src/YiAim.Shop.HttpApi/"]
COPY ["src/YiAim.Shop.EntityFrameworkCore/YiAim.Shop.EntityFrameworkCore.csproj", "src/YiAim.Shop.EntityFrameworkCore/"]
RUN dotnet restore "src/YiAim.Shop.Web/YiAim.Shop.Web.csproj" 
COPY . .
WORKDIR "/src/src/YiAim.Shop.Web"
RUN dotnet build "YiAim.Shop.Web.csproj" -c Release -o /app/buildFROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "YiAim.Shop.Web.csproj" -c Release -o /app/publish /p:UseAppHost=falseFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YiAim.Shop.Web.dll"]

在这里插入图片描述

这篇关于Docker构建镜像时本地NuGet不存在的解决方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124288

相关文章

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时