zoukankan      html  css  js  c++  java
  • centos下.Netcore的docker容器部署出现“The type initializer for 'Gdip' threw an exception.”

    今天在.Netcore项目里增加了图片验证码功能,在windows部署下未发现问题,但是在Linux(Centos)下部署却出现了如下问题

    查了下是因为用了System.Drawing.Common类库需要在linux下安装一下libgdiplus来支持图像处理,图片处理,因为我的环境是在Docker环境下,所以去要在容器中增加一下

    我们在构建的Dockerfile里面增加阿里源以及增加libgdiplus,具体如下

    FROM mcr.microsoft.com/dotnet/sdk:5.0
    
    RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/libdl.so
     
    RUN echo "deb http://mirrors.aliyun.com/debian wheezy main contrib non-free 
    deb-src http://mirrors.aliyun.com/debian wheezy main contrib non-free 
    deb http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free 
    deb-src http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free 
    deb http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free 
    deb-src http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free" > /etc/apt/sources.list
     
    RUN apt-get update
    RUN apt-get install libgdiplus -y && ln -s libgdiplus.so gdiplus.dll
    
    COPY . /publish
    
    WORKDIR /publish
     
    EXPOSE 8801
     
    CMD ["dotnet", "Test.dll", "--urls", "http://*:8801"]
    
    

    然后我们执行一下,出现了以下问题

    Step 4/9 : RUN apt-get update
     ---> Running in 9b0f24c74c80
    Ign:1 http://mirrors.aliyun.com/debian wheezy InRelease
    Err:2 http://mirrors.aliyun.com/debian wheezy Release
      404  Not Found [IP: 111.160.44.225 80]
    Reading package lists...
    E: The repository 'http://mirrors.aliyun.com/debian wheezy Release' does not have a Release file.
    The command '/bin/sh -c apt-get update' returned a non-zero code: 100
    Unable to find image 'ladder/devtools:latest' locally
    docker: Error response from daemon: pull access denied for ladder/devtools, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
    See 'docker run --help'.
    
    

    看了下是说好像是说镜像的问题

    查了一下说是wheezy为debian(Linux发行版)的以前版本,因为Asp.Net Core5.0的docker镜像就是基于debian系统构建的,debian每个版本都有相对应的名字

    • 5是Debian
    • 6是squeeze
    • 7是wheezy
    • 8是jessie
    • 9是stretch

    那我们把镜像的系统改为最新的stretch,dockerfile如下

    FROM mcr.microsoft.com/dotnet/sdk:5.0
    
    RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/libdl.so
     
    RUN echo "deb http://mirrors.aliyun.com/debian stretch main contrib non-free 
    deb-src http://mirrors.aliyun.com/debian stretch main contrib non-free 
    deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free 
    deb-src http://mirrors.aliyun.com/debian stretch-updates main contrib non-free 
    deb http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free 
    deb-src http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free 
    deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib 
    deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" > /etc/apt/sources.list
     
    # RUN apt-get update
    # RUN apt-get install -y --allow-unauthenticated libgdiplus libc6-dev libgdiplus libx11-dev && ln -s libgdiplus.so gdiplus.dll
    # RUN rm -rf /var/lib/apt/lists/*
    
    RUN apt-get update
    RUN apt-get install libgdiplus -y && ln -s libgdiplus.so gdiplus.dll
    
    COPY . /publish
     
    WORKDIR /publish
     
    EXPOSE 8801
     
    CMD ["dotnet", "DevTools.dll", "--urls", "http://*:8801"]
    

    可以看到已经成功启动,再看下验证码

    已经成功识别了,因为我的图片不涉及中文,有中文的问题可以查看其他文章

  • 相关阅读:
    范仁义css3课程---7、文本样式2
    android图片缓存框架Android-Universal-Image-Loader(二)
    Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
    憨人 音译
    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
    Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
    Android开发
    87狂热
    迟志强
    翟惠民
  • 原文地址:https://www.cnblogs.com/shook/p/14677578.html
Copyright © 2011-2022 走看看