先说一个问题

首先记录一个问题,今天在用 Jenkins 构建项目的时候突然出现包源的错误:

/usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): error : Unable to load the service index for source https:
/usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): error :   The HTTP request to 'GET https://api.nuget.org/v3/index.json' has timed out after 100000ms. [/....csproj]

nuget的包源无法访问(无法ping通),而我在一台服务器上访问https://api.nuget.org/v3/index.json时则会自动重定向到https://nuget.cdn.azure.cn/v3/index.json

但是打包机器执行dotnet restore却还是无法还原成功,即使指定包源后即dotnet restore -s https://nuget.cdn.azure.cn/v3/index.json 能还原一部分包,部分包依旧无法还原

最后测试发现,包源只是部分地区无法访问,可以尝试切换源/使用Nuget.Config文件试试,当然最快的还是通过科学的方式访问~。

若本地 VS 的包管理器也无法正常使用,切换源(https://nuget.cdn.azure.cn/v3/index.json)即可

再说另外一个问题

然后这篇文章其实是另外的一个问题,之前我构建了一个基础镜像包,基于FROM microsoft/dotnet:2.2-aspnetcore-runtime构建,而我构建时使用的sdk镜像是FROM microsoft/dotnet:2.2-sdk

9.23号(.net core 3.0发布)之前还能够正常构建,今天在解决了上面包源问题后,镜像构建成功并发布到服务器,却发现镜像无法启动起来。

报错信息如下

The specified framework 'Microsoft.NETCore.App', version '2.2.2' was not found.- Check application dependencies and target a framework version installed at:/usr/share/dotnet/- Installing .NET Core prerequisites might help resolve this problem:http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409- The .NET Core framework and SDK can be installed from:https://aka.ms/dotnet-download- The following versions are installed:2.2.0 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]

既然说是版本问题,那就尝试着将基础进行修改为FROM microsoft/dotnet:2.2.2-aspnetcore-runtime,果然,重新构建后能够好好的运行起来了。

那么我是如何构建的基础镜像的,只需下面 3 个文件就搞定了。

阿里云镜像源

阿里云的软件包源,可用于一些基础镜像中没有的软件安装,写入到 sources.list 供后面使用

  • 文件:sources.list

deb http:
deb-src http:
deb http:
deb-src http:
deb http:
deb-src http:

一个包含图像库的 Dockerfile

基于dotnet:2.2.2 aspnetcore-runtime,并在其中安装 libgdiplus,设置时区,具体的可以根据自己的项目需要去构建

文件:Dockerfile

FROM microsoft/dotnet:2.2.2-aspnetcore-runtime
WORKDIR /app
COPY sources.list /app/sources.list
RUN rm -f /etc/apt/sources.list && mv sources.list /etc/apt/ && apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dllENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

使用脚本推送镜像到阿里云的容器镜像仓库

要推送镜像到阿里云,需要先去阿里云开通并创建命名空间

文件名:build.sh (Linux添加执行权限 chmod +x ./build.sh)

export ALIYUN_DOCKER_CLOUD_URL=registry.cn-hangzhou.aliyuncs.com
export DOCKER_IMAGE_NAME=yimocoding/dotnet2.2.2-base
export BUILD_NUMBER=latestdocker build -t $DOCKER_IMAGE_NAME -f ./Dockerfile .
docker tag $DOCKER_IMAGE_NAME $ALIYUN_DOCKER_CLOUD_URL/$DOCKER_IMAGE_NAME:$BUILD_NUMBER
echo 推送镜像到云端
docker push $ALIYUN_DOCKER_CLOUD_URL/$DOCKER_IMAGE_NAME:$BUILD_NUMBERecho '删除本地镜像'
docker rmi $DOCKER_IMAGE_NAME
docker rmi $ALIYUN_DOCKER_CLOUD_URL/$DOCKER_IMAGE_NAME:$BUILD_NUMBER

三个文件的目录结构

文件创建完成后,执行 build.sh 即可构建镜像并推送到阿里云的镜像仓库,若想提交到其他云仓库,修改脚本中的变量即可

示例文件:https://github.com/yimogit/MeDocker/tree/dotnet

真是,人在家中坐,锅从天落,而为了更好的接锅,记录一二,免得到时候望码兴叹。

自定义构建基于.net core 的基础镜像相关推荐

  1. 如何构建基于.NET Core和云环境下的微服务技术体系?

    这个内核用处不大,但.NET 内核却666 随着业务需求的增长,我们现在开发非常大型和复杂的项目,需要更多时间来构建和部署.每当质量检查报告任何问题时,我们都需要对其进行调试或修复,然后部署整个代码. ...

  2. 【Docker】基于系统iso构建docker基础镜像

    1.搭建本地yum源 1)将镜像通过光盘或U盘挂载到/mnt目录下 mount /media/kylin/xxx.iso /mnt/kylin 2)修改/etc/yum.repo.d/ kylin_x ...

  3. docker之操作管理应用模板、镜像、容器、构建基础镜像、状态删除

    五.Docker操作管理 1.应用模板 (1)Concrete5 通过"应用商店"部署Concrete5,修改网页访问端口为9091,通过curl命令访问首页,提交执行结果文本到命 ...

  4. 构建node.js基础镜像_在Android上构建Node.js应用程序

    构建node.js基础镜像 by Aurélien Giraud 通过AurélienGiraud 在Android上构建Node.js应用程序-第1部分:Termux,Vim和Node.js (Bu ...

  5. 【FastDfs】Docker自定义构建ARM架构的FastDfs镜像

    [FastDfs]Docker自定义构建ARM架构的FastDfs镜像 1. 环境准备 1.1 下载源码包 2. 初步构建只包含安装包的基础镜像 3. 在基础镜像上编译安装所需软件 2022-11-0 ...

  6. 云效支持自定义构建镜像 征集10家企业免费使用

    注:目前该功能处于公测阶段,现征集10家企业优先免费体验,如果您有需要,请通过页面右下角'提问'悬浮球联系我们,或者文末钉钉扫码联系此功能的技术顾问. 为什么需要自定义构建镜像? 构建环境的需求是复杂 ...

  7. 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用

    构建node.js基础镜像 by Oyetoke Tobi Emmanuel 由Oyetoke Tobi Emmanuel 我如何使用Node.js构建工作抓取网络应用 (How I built a ...

  8. 移动应用AI化成新战场?详解苹果最新Core ML模型构建基于机器学习的智能应用...

    Google刚刚息鼓,苹果又燃战火!这一战,来自移动应用的AI化之争. 近日,苹果发布专为移动端优化的Core ML后,移动开发者对此的需求到底有多强烈?去年大获成功的AI应用Prisma又能告诉我们 ...

  9. R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标

    R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数.阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化.基于数据阳性样本比例选择合适的分类评估指标 目录

最新文章

  1. Appium的Java封装
  2. Symfony3.0 实践教程 (三) 安装与配置Symfony
  3. 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
  4. 如何判断文本文件的编码格式?
  5. 多久没有给家里打过电话了?
  6. 4.深度学习练习:Building your Deep Neural Network: Step by Step(强烈推荐)
  7. javascript小技巧JavaScript[对象.属性]集锦
  8. wordpress主题Z-blog拓源纯净版
  9. es6 Node加载
  10. Mysql学习总结(58)——深入理解Mysql的四种隔离级别
  11. 迅通雾霾处理技术为清晰都市保驾护航
  12. sqk,按分钟统计平均值
  13. (附代码)手写滑动验证码,完整代码开放
  14. Android学习笔记——用户界面开发进阶(多个示例记录)
  15. 壳聚糖/纳米金水凝胶/纳米木质素/掺杂二硫化钼/微米级Ag2O2掺杂壳聚糖水凝胶的制备研究
  16. 教你如何在Windows XP使用定时关机命令
  17. linux驱动更新软件下载,NVIDIA英伟达显卡驱动程序更新下载(32/64位) v384.90 Linux版...
  18. C语言编程>第二十三周 ③ 下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序;然后把第三字符插入
  19. 4【Android 12】InputDispatcher分发事件
  20. 什么是握手信号? 什么是握手协议?

热门文章

  1. 理解T-SQL: 脚本和批处理
  2. 开通博客园,新的网络生活的开始
  3. 如何从手机或PC将游戏下载到PlayStation 4
  4. MySQL5.6二进制软件包编译安装详解(三)
  5. 使用js代码将HTML Table导出为Excel
  6. WPF 实现音频播放动画控件
  7. FreeBSD大败局
  8. 使用Dynamic LINQ创建高级查询服务
  9. Linux下部署Kubernetes+Kubesphere(一)Kubernetes基础
  10. 使用云原生应用和开源技术的创新攻略