在之前的文章《dotNET Core中使用Aspose(部署Docker)》中介绍了在 dotNet Core2.1 中使用 Aspose ,并部署到 Docker 中,现在 dotNET Core 升级到了 3.1 ,Docker 镜像发生了变化,一些依赖的安装也有些变化。

在 dotNet Core 2.1 中构建镜像可以使用下面的 Dockerfile:

[root@localhost core3.1_images_build]# vi Dockerfile
FROM microsoft/dotnet:2.1-aspnetcore-runtime
RUN apt-get update;
RUN apt-get install libfontconfig1 -y
RUN apt-get install libgdiplus -y
RUN ln -s /usr/lib/libgdiplus.so /lib/x86_64-linux-gnu/libgdiplus.so
RUN apt-get install -y libc6-devCOPY . /app
COPY simhei.ttf /usr/share/fonts/
COPY simsunb.ttf /usr/share/fonts/
COPY simsun.ttc /usr/share/fonts/
COPY BSONGSJ.TTF /usr/share/fonts/
COPY cybsongsj.ttf /usr/share/fonts/
COPY hyktjn.ttf /usr/share/fonts/COPY ./font/WINGDNG3.TTF /usr/share/fonts/
COPY ./font/WINGDNG2.TTF /usr/share/fonts/
COPY ./font/BSSYM7.TTF /usr/share/fonts/
COPY ./font/symbol.ttf /usr/share/fonts/
COPY ./font/wingding.ttf /usr/share/fonts/
COPY ./font/webdings.ttf /usr/share/fonts/
COPY ./font/segmdl2.ttf /usr/share/fonts/WORKDIR /appEXPOSE 80/tcp

本来升级到 3.1 应该是很顺利的,由于一个简单的失误,导致绕了一个大圈子。

在 dotNET Core 3.1 的官方镜像中已经安装了 libgdiplus 和 libc6 ,所以只用安装 libfontconfig1 就可以, Dockerfile 如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
RUN apt-get update;
RUN apt-get install libfontconfig1 -yCOPY . /app
COPY simhei.ttf /usr/share/fonts/
COPY simsunb.ttf /usr/share/fonts/
COPY simsun.ttc /usr/share/fonts/
COPY BSONGSJ.TTF /usr/share/fonts/
COPY cybsongsj.ttf /usr/share/fonts/
COPY hyktjn.ttf /usr/share/fonts/COPY ./font/WINGDNG3.TTF /usr/share/fonts/
COPY ./font/WINGDNG2.TTF /usr/share/fonts/
COPY ./font/BSSYM7.TTF /usr/share/fonts/
COPY ./font/symbol.ttf /usr/share/fonts/
COPY ./font/wingding.ttf /usr/share/fonts/
COPY ./font/webdings.ttf /usr/share/fonts/
COPY ./font/segmdl2.ttf /usr/share/fonts/WORKDIR /appEXPOSE 80/tcp

dotNet Core 框架升级到了 3.1,其他很多中间件也做了同步升级,包括 Aspose,但后来因为一些原因,Aspose 还是使用了原来的 18.7,对应的 libSkiaSharp.so  文件没有降级,最后发现,这个才是问题的所在

一开始,按照相同的方式在 3.1 的镜像中安装依赖,安装完成创建容器后,进入容器,使用 ldd libSkiaSharp.so 可以看看依赖是否安装完整,正常情况如下图:

libSkiaSharp.so 文件可以在这个地址中找到:https://github.com/mono/SkiaSharp/releases/tag/v1.60.3

依赖是完整的,但示例程序部署到容器后,依然报错,一开始没想到是 libSkiaSharp.so 文件的问题,思考方向是 3.1 和 2.1 的容器是不是有什么不一样,最终发现 3.1 使用的是 Debian GNU/Linux 10 发型版,而 2.1 是 9,尝试在 2.1 的镜像中安装 3.1 的运行时,以失败而告终。

另一个思路马上浮现出来,就是拉取 centos7 的基础镜像,在里面安装相关的依赖和运行时,先使用下面命令拉取基础镜像:

docker pull centos:7.4.1708

创建一个容器

docker run -itd --privileged -p 90:22 --name centos centos:7.4.1708 /usr/sbin/init

进入容器安装运行时

rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
yum install aspnetcore-runtime-3.1

安装相关依赖

yum -y install fontconfig
yum -y install ttmkfdir
yum install libgdiplus-devel
yum install glibc -y

如果发现安装时提示找不到组件包,可能需要切换源:

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

重新构建容器运行示例程序,发现问题依然存在,这时就感觉不是 Core 3.1 镜像的原因了,然后找了一个干净的 centos 7 的服务器进行验证,装好运行时和相关依赖,将示例程序直接运行在 centos 7 中,出现和容器中同样的问题。基本可以排除是镜像的问题了。

将新的程序和之前 2.1 的程序进行对比,最终发现是 libSkiaSharp.so 文件不一致,替换 libSkiaSharp.so 文件后,centos 7 中运行正常,容器中也运行正常。

参考:

  • https://stackoverflow.com/questions/59208166/skiasharp-skimageinfo-exception-in-aspose-word-v18-8-0

  • https://www.cnblogs.com/xiaoxiaoqiye/p/13355344.html

  • https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos

  • https://github.com/mono/SkiaSharp/releases/tag/v1.60.3

  • https://q.cnblogs.com/q/109061/

dotNet Core 3.1 使用 Aspose (部署 Docker)相关推荐

  1. 【Step By Step】将Dotnet Core部署到Docker上

    [Step By Step]将Dotnet Core部署到Docker上 原文: [Step By Step]将Dotnet Core部署到Docker上 本教程的前提是,你已经在Linux服务器上已 ...

  2. 【Step By Step】将Dotnet Core部署到Docker下

    一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...

  3. 【Step By Step】将Dotnet Core部署到Docker(中)

    [Step By Step]将Dotnet Core部署到Docker(中) 原文:[Step By Step]将Dotnet Core部署到Docker(中) 在Docker中运行MySql MyS ...

  4. 【.Net Core】把dotnet core 项目部署到docker

    把dotnet core 项目部署到docker Docker Dockerfile 部署到Centos8 发布 运行容器: 容器内运行命令 Docker Dockerfile # 引入镜像,低版本 ...

  5. k8s pod部署到不同node_部署Dotnet Core应用到Kubernetes(一) - 老王Plus

    最近闲了点,写个大活:部署Dotnet应用到K8s. 写在前边的话 一直想完成这个主题.但这个主题实在太大了,各种拖延症的小宇宙不时爆发一下,结果就拖到了现在. 这个主题,会是一个系列.在这个系列中, ...

  6. 部署Dotnet Core应用到Kubernetes(一)

    最近闲了点,写个大活:部署Dotnet应用到K8s.   写在前边的话 一直想完成这个主题.但这个主题实在太大了,各种拖延症的小宇宙不时爆发一下,结果就拖到了现在.   这个主题,会是一个系列.在这个 ...

  7. 边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)

    写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...

  8. arm linux源更新,[Linux] - Manjaro ARM 系统配置(更新镜像源,安装 Docker 和 Dotnet Core)...

    硬件:Raspberry Pi 4B 系统:Manjaro-ARM-xfce-rpi4-19.08 网址:https://manjaro.org/ Issue 系统启动后,中文字符显示为小方格乱码 解 ...

  9. DOCKER上运行DOTNET CORE

    DOCKER上运行DOTNET CORE 原文:DOCKER上运行DOTNET CORE 下载microsoft/dotnet镜像 运行命令: docker pull microsoft/dotnet ...

最新文章

  1. SAP WM 二步法确认TO场景下WM库存状态变化
  2. c++设计模式之简单工厂模式
  3. HDOJ 4704 Sum 规律 欧拉定理
  4. emacs的使用方法
  5. 【AI视野·今日CV 计算机视觉论文速览 第217期】Thu, 10 Jun 2021
  6. matlab 垂直边缘检测,matlab 边缘检测
  7. 【学习 OpenCV】—— 图像减色(color reduced)
  8. ec6108v9a精简刷机包_新版华为悦盒EC6108V9E、V9I第三方精简流畅无安装限制固件
  9. 微信查询对账单对账+数据读取解析入库
  10. Micron(美光)内存颗粒的命名规则,7lk17d9PTK,MT29F2G08ABAEA(矿机自带)
  11. 给客户寄样品谁付快递费?寄样品的运费太多了怎么管理?
  12. 企业中了勒索病毒该怎么办?可以解密吗?
  13. 计算机的表白隐藏功能,微信隐藏符号功能大全 情人节可以发这些表白
  14. 综合布线容易忽略的问题
  15. 2021年中国光谱分析仪器市场趋势报告、技术动态创新及2027年市场预测
  16. office2007各组件全面介绍
  17. ABAC权限模型的设计
  18. 友善之臂S70B改成四线触摸
  19. python系列之:socks.GeneralProxyError: Socket error: Connection closed unexpectedly
  20. mass Framework switchable插件

热门文章

  1. BZOJ4012 [HNOI2015]开店
  2. 4.Linux的目录结构
  3. Linux下汇编语言学习笔记65 ---
  4. VS2010 安装问题积累
  5. mysql在linux下修改存储路径
  6. 在Windows Media Center中收听超过100,000个广播电台
  7. 弄断过河电缆_你说的是:剪断电缆线
  8. t30智能插座怎么设置_如何设置ConnectSense智能插座
  9. macbook图形化编程_如何判断MacBook使用的是哪种图形芯片(并进行切换)
  10. Comcast以纯文本泄露客户Wi-Fi登录信息,立即更改密码