惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Latest news
Latest news
T
Troy Hunt's Blog
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
V
V2EX
博客园 - 司徒正美
B
Blog RSS Feed
AWS News Blog
AWS News Blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
NISL@THU
NISL@THU
博客园 - Franky
P
Proofpoint News Feed
博客园_首页
C
CERT Recently Published Vulnerability Notes
雷峰网
雷峰网
S
Schneier on Security
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
WordPress大学
WordPress大学
The Hacker News
The Hacker News
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
Engineering at Meta
Engineering at Meta
罗磊的独立博客
T
The Blog of Author Tim Ferriss
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
SecWiki News
SecWiki News
云风的 BLOG
云风的 BLOG
美团技术团队
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
B
Blog
S
Security Affairs

博客园 - oec2003

读《有效需求分析》 重读《打造 Facebook》 为什么这么忙,还依然做不好事情? dotNET Core:编码规范 程序员是终身学习的职业,应该怎么学习? 一款用了就不想走的工具 dotNET:怎样处理程序中的异常(实战篇)? dotNET:怎样处理程序中的异常(理论篇)? Nginx:rewrite 的几个技巧 如何激发团队潜能? dotNET Core 3.X 使用 Autofac 来增强依赖注入 dotNET Core 3.X 依赖注入 读《鞋狗》 Jenkins 中以构建 Tag 来实现版本管理 dotNET Core 3.X 使用 Jwt 实现接口认证 dotNET Core 3.X 请求处理管道和中间件 dotNET Core 3.X 使用 Web API 程序员还有35岁的坎吗? 远程办公也可以高效
dotNet Core 3.1 使用 Aspose (部署 Docker)
oec2003 · 2020-10-19 · via 博客园 - oec2003

在之前的文章《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-dev

COPY . /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 /app

EXPOSE 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 -y

COPY . /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 /app

EXPOSE 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 中运行正常,容器中也运行正常。

参考: