對於微軟官方提供的鏡像microsoft/aspnetcore2.0來說,它沒有安裝libgdiplus包,所以當你使用了draw去畫圖時,就會出現一些問題,我們一般會安裝第三方的包包,ZKWeb.System.Drawing,而發佈到docker里之後,運行時,會出現找不到dll的情況! 原因: ...
對於微軟官方提供的鏡像microsoft/aspnetcore2.0來說,它沒有安裝libgdiplus包,所以當你使用了draw去畫圖時,就會出現一些問題,我們一般會安裝第三方的包包,ZKWeb.System.Drawing,而發佈到docker里之後,運行時,會出現找不到dll的情況!
原因:
微軟的aspnetcore鏡像是在Ubuntu操作系統基礎之上的,而這個系統上並沒有安裝libgdiplus,所以需要我們手動把鏡像運行後,先安裝一下,然後commit成自己的鏡像,以後對於這種需要Drawing的項目,就引用自己的鏡像就可以了。
解決方法(一):
進行鏡像對應的容器
docker run -it containerid
然後去安裝它
apt-get install libgdiplus
然後退出
exit
最後commit成為自己的鏡像
sudo docker commit 8b10012d942f lind/aspnetcore:2.0
你可以把這個鏡像導出,放到自己的伺服器上
docker save 8b10012d942f > lind_aspnetcore.tar
最後,在目標伺服器上運行即可!
解決方法(二):
修改你的Dockerfile文件,使用RUN命令去安裝你的libgdiplus,但個人覺得,這種有些浪費資源,畢竟需要每個容器都要去安裝一個它,而且下載速度不敢恭維!
FROM microsoft/aspnetcore:2.0 ARG source RUN apt-get update RUN apt-get install libgdiplus WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "LindSMS.dll"]
當然上面的方案二不會產生新的鏡像,這點到是挺乾凈,哈哈!
感謝閱讀!