Windows 容器镜像踩坑记录

为什么研究windows容器?emm,公司需要,不想多说。

dotnet后端

问题描述:

基于mcr.microsoft.com/dotnet/aspnet:6.0镜像撰写dockerfile编译.net core后端项目后运行容器出现类库不存在问题:

  1. 程序中使用了fastreport,而它需要调用gdiplus.dll类库

  2. 官方基础镜像基于nanoserver镜像制作,该镜像不支持使用gdiplus.dll类库,尝试复制gdiplus.dll到容器的C:\Windows\System32\无效。

  3. 在这里插入图片描述

相关资料:

  • dotnet-docker/documentation/scenarios/using-system-drawing-common.md at main · dotnet/dotnet-docker (github.com)

  • 使用基于 Windows 的 docker 映像时无法加载 DLL“gdiplus.dll” ·问题 #1098 ·dotnet/dotnet-docker (github.com)

  • Windows Nano 容器是否支持基于 MFC、GDI 的应用程序?- Microsoft 问答

解决办法:

使用mcr.microsoft.com/dotnet/aspnet:6.0-windowsservercore-ltsc2022作为运行容器的基础镜像。缺点:最终的镜像大小约4-5个G。

前端node基础镜像

问题1描述:

前端基于vben框架打造,vben项目中的某些依赖在使用nanoserver安装node的基础镜像中无法被还原,使用nanoserver镜像作为基础镜像制作node镜像后,在dockerfile中执行yarn install时报错如下(目前未能找到问题,应该是系统缺少某些类库):

在这里插入图片描述

解决办法:

使用mcr.microsoft.com/windows/servercore:ltsc2022作为基础镜像去撰写node镜像的dockerfile

问题2描述:

基于mcr.microsoft.com/windows/servercore:ltsc2022安装node后再还原项目依赖时报错如下:(报错的依赖源自于vben,最后发现还是系统中缺少某些类库造成的)

在这里插入图片描述

解决办法:

使用servercore作为基础镜像安装vc_redit.x64.exe后,再安装node

替代方案:将vcruntime140.dll库复制到容器的C:/Windows/System32/目录(测试可行,vcruntime140.dll在安装vc_redit.x64后生成)

前端nginx基础镜像

问题描述:

前端通过node打包编译后最终需要挂载到nginx上运行,为了缩小镜像大小尝试使用nanoserver作为基础镜像安装nginx,但发现安装后无法启动nginx,也不产生报错信息。经过查阅资料发现nanoserver仅支持64位的程序,而nginx提供的预编译 nginx Windows 二进制文件是 32 位的,如果您需要 64 位 Windows 二进制文件,您可以尝试按照 nginx官方文档 中所述自行编译它。

解决办法:

使用mcr.microsoft.com/windows/servercore:ltsc2022作为基础镜像去撰写nginx镜像的dockerfile

相关资料:

  • 如何在基于 Windows Nano Server 的容器中运行 nginx?- 服务器故障 (serverfault.com)
  • #1274 (nginx 无法在 Windows Nano Server 中启动) – nginx
  • 添加对 Nanoserver 的 32 位 x86 支持 ·问题 #118 ·microsoft/Windows-容器 (github.com)

nanoserver基础镜像的限制相关资料

  • 支持 MSVC redistributables 在 nanoserver 容器内下载 ·期号 #112 ·microsoft/Windows-容器 (github.com)

  • 如何在Windows NanoServer上安装vCredit?- Microsoft 问答

  • 如何在nanoserver中安装vc_redist ·问题 #40131 ·dotnet/运行时 (github.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/661901.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端 CSS

目录 选择器 复合选择器 伪类-超链接 结构伪装选择器 伪元素选择器 画盒子 字体属性 CSS三大属性 Emmet写法 背景属性 显示模式 盒子模型 盒子模型-组成 盒子模型-向外溢出 盒子模型-圆角 盒子模型-阴影 flex position定位 CSS小精灵 字体图标 垂直对齐方式…

2024HW --->操作系统权限维持

前面不是说要讲隧道吗, 没错,我又鸽了🕊🕊🕊🕊,那么今天现在讲一下操作系统的权限维持! 在我们提权之后,或者说打穿了整个内网之后,我们需要做权限维持&#…

复旦 北大 | 从头训练中文大模型:CT-LLM

引言 当前,绝大多数大模型(LLMs)基本上都是以英文语料库训练得到的,然后经过SFT来匹配不同的语种。然而,今天给大家分享的这篇文章旨在从头开始训练中文大模型,在训练过程中「主要纳入中文文本数据」&…

javaScript 判断闰年

接受用户输入年份 如果是闰年就弹出闰年,遇到平年就是弹出平年 var a prompt(请输入年份);if(a%40&&a%100!0||a%4000){alert(闰年);}else{alert(平年);}

【C++】学习笔记——类和对象_5

文章目录 二、类和对象14. 日期类的实现15. const成员16. 取地址重载17. 再谈构造函数初始化列表 18. explicit关键字19. static成员 未完待续 二、类和对象 14. 日期类的实现 上一篇我们已经大致将日期类的重要功能都给实现了,这节将会对日期类进行完善&#xff…

9.【Linux】(死锁问题||线程同步||条件变量||生产者消费者模型)

常见锁的概念 死锁 死锁是指在一组进程中各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源而处于一种永久等待的状态。简单来说就是两个线程都 在等待对方释放锁。 死锁必要条件 必须同时满足四个条件才会产生死锁 1.互斥条件&…

在做题中学习(48):朴素的二分查找

. - 力扣(LeetCode) 解法一: 暴力求解 for循环中,从nums[0]枚举到nums[n-1],依次判断,返回 target的值。 时间复杂度 : O(N) :因为要遍历一遍数组 解法二:二分查找 因为此数组为有序的…

AI大模型探索之路-训练篇9:大语言模型Transformer库-Pipeline组件实践

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

MT3608B 航天民芯代理 1.2Mhz 24V输入 升压转换器

深圳市润泽芯电子有限公司为航天民芯一级代理商 技术支持欢迎试样~Tel:18028786817 简述 MT3608B是恒定频率的6针SOT23电流模式升压转换器,用于小型、低功耗应用。MT3608B开关频率为1.2MHz,允许使用微小、低电平成本电容器和电感器高度不…

托普利兹矩阵(T矩阵)及其应用(Matlab demo测试)

托普利兹矩阵(T矩阵)及其应用(Matlab demo测试) 1. 概念2. Matlab简单测试2.1 生成测试2.2 基本性质及原理2.3 性质验证 3. 其他应用总结3.1 其他性质3.2 文献阅读看到的 参考资料 1. 概念 托普利兹矩阵,简称为T型矩阵…

深入探索计算机视觉:高级主题与前沿应用的全面解析

引言 计算机视觉,作为人工智能领域的一个重要分支,旨在让计算机能够“看”懂世界,理解和解释视觉场景。随着深度学习技术的迅猛发展,计算机视觉已经在许多领域取得了显著的进展,如自动驾驶、安防监控、医疗诊断等。在…

PG后台进程个人解读和与oracle 的比较

1.background writer (后台写进程) 与OracleDBWR进程工作原理类似,都是负责把缓冲区里面的脏块写到数据文件中,写的目的有两个: 1.为了保存数据。 2.为了释放内存空间。 触发background writer 写的条件&#xff1a…