为什么研究windows容器?emm,公司需要,不想多说。
dotnet后端
问题描述:
基于mcr.microsoft.com/dotnet/aspnet:6.0
镜像撰写dockerfile
编译.net core
后端项目后运行容器出现类库不存在问题:
-
程序中使用了
fastreport
,而它需要调用gdiplus.dll
类库 -
官方基础镜像基于
nanoserver
镜像制作,该镜像不支持使用gdiplus.dll
类库,尝试复制gdiplus.dll
到容器的C:\Windows\System32\
无效。
相关资料:
-
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)