docker~aspnetcore2.0鏡像(xiang)缺(que)少libgdiplus問題
對于微軟官(guan)方提供(gong)的鏡(jing)像microsoft/aspnetcore2.0來(lai)說,它沒有安裝libgdiplus包,所以(yi)當你(ni)使(shi)用了draw去畫(hua)圖時,就(jiu)會(hui)出現一(yi)些(xie)問題,我(wo)們一(yi)般會(hui)安裝第三(san)方的包包,ZKWeb.System.Drawing,而發布到docker里之后(hou),運行時,會(hui)出現找不(bu)到dll的情況!
原因:
微軟的aspnetcore鏡(jing)像(xiang)是在Ubuntu操(cao)作(zuo)系統基(ji)礎(chu)之上的,而這(zhe)個(ge)系統上并沒有(you)安(an)裝libgdiplus,所以需(xu)要我們手動把鏡(jing)像(xiang)運行后,先安(an)裝一(yi)下,然后commit成自己的鏡(jing)像(xiang),以后對于這(zhe)種需(xu)要Drawing的項目,就(jiu)引用(yong)自己的鏡(jing)像(xiang)就(jiu)可以了(le)。
解(jie)決方法(一):
進行鏡像對應的容器
docker run -it containerid
然后去安裝它
apt-get install libgdiplus
然后退出
exit
最后commit成為自己的鏡像
sudo docker commit 8b10012d942f lind/aspnetcore:2.0
你可以把(ba)這個鏡像導出(chu),放到自(zi)己的服(fu)務器上
docker save 8b10012d942f > lind_aspnetcore.tar
最后(hou),在目(mu)標服(fu)務(wu)器(qi)上運行即可!
解決方法(二):
修改你(ni)的Dockerfile文(wen)件,使用RUN命令去(qu)安裝你(ni)的libgdiplus,但個(ge)人覺得,這種(zhong)有(you)些(xie)浪費資源,畢竟需要每(mei)個(ge)容器(qi)都要去(qu)安裝一(yi)個(ge)它,而且下載速(su)度(du)不敢恭維!
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"]
當然(ran)上(shang)面的(de)方案二不會產生新的(de)鏡(jing)像,這點到是挺干凈,哈(ha)哈(ha)!
感謝閱讀!