概述
近期 @sheng-jie 为 WTM 框架提了个 issue #50 The captcha doesn’t show if deploy the app to the docker,并给出了解决方案及建议。
在此先感谢一下 @sheng-jie的贡献。
解决方案
默认镜像
这个问题主要是在于默认的 docker 镜像 mcr.microsoft.com/dotnet/core/aspnet:2.2
不包含 libgdiplus
的依赖。
在容器运行之后,调用了相关的 API 就将触发以下异常:
1 | fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] |
根据 @sheng-jie
提供的解决方案,只需在 Dockerfile
中添加如下配置命令即可解决。
1 | # install libgdiplus for System.Drawing |
完整 Dockerfile
文件如下所示:
1 | FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build |
alpine 镜像
但是这并未解决 mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine
镜像的问题。
当然解决思路类似,在 alpine
包源上查找 libgdiplus 依赖即可。
注意:当前 alpine 下的 libgdiplus
并未正式发布,还是测试版本
下面我直接给出完整的 Dockerfile
文件内容
1 | FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build |
当我以为已经解决 libgdiplus
的问题时,经测试又出现如下问题:
1 | fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] |
提示也很明确未找到字体库文件,所以解决思路是需要为 alpine 镜像安装一个字体库。
下面我直接给出完整的 Dockerfile
文件内容
1 | FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build |