在 Kubernetes 上运行 dotnet core 3.0 docker 映像时出错



重现问题的步骤

使用 dotnet
  1. CLI 创建 webapi 项目模板(dotnet --version = 3.0.100(
  2. 构建 dockerfile 以创建映像(请参阅下面的 dockerfile(
  3. 在本地 docker 上运行 docker 镜像(工作正常(
  4. 将此 docker 映像推送到 docker 注册表
  5. 将其部署到 K8s 上(在 AWS 上使用 EKS(

预期行为

Pod 启动并运行 webapi

实际行为

Pod 无法启动,日志中出现以下错误:

terminate called after throwing an instance of 'boost::wrapexcept<util::AprException>'
what():  BaseException: Could not find the requested symbol. at /opt/jenkins/oa-s173/cmake-64-d/agent/native/shared/libutil/src/main/cpp/util/AprException.h:54 at static void util::AprException::check(apr_status_t)
at liboneagentdotnet.so [0x90ec22]
at liboneagentdotnet.so [0x90ed1b]
at liboneagentdotnet.so [0x90ed7c]
at liboneagentdotnet.so [0x143d61]
at liboneagentdotnet.so [0x144adb]
at unknown [0x7f4a024acee2]
at unknown [0x7f4a024accef]
at unknown [0x7f4a024a4e48]
at unknown [0x7f4a024acb40]
at unknown [0x7f4a024aca6c]
at unknown [0x7f4a024ac77a]
at unknown [0x7f4a024a3299]
at unknown [0x7f4a024a2dd1]
at unknown [0x7f4a024a2d4e]
at unknown [0x7f4a024a2425]
at unknown [0x7f4a020ac426]
at unknown [0x7f4a020aca3d]
at libcoreclr.so(CallDescrWorkerInternal+0x7b) [0x24dcae]
at libcoreclr.so(CallDescrWorkerWithHandler(CallDescrData*, int)+0x74) [0x17dfc4]
at libcoreclr.so(DispatchCallDebuggerWrapper(CallDescrData*, ContextTransitionFrame*, int)+0x86) [0x17e0b6]
at libcoreclr.so(DispatchCallSimple(unsigned long*, unsigned int, unsigned long, unsigned int)+0xb6) [0x17e236]
at libcoreclr.so(MethodTable::RunClassInitEx(Object**)+0x1a1) [0x115d61]
at libcoreclr.so(MethodTable::DoRunClassInitThrowing()+0x2f8) [0x1162e8]
at libcoreclr.so(JIT_GetSharedNonGCStaticBase_Helper+0xcf) [0x1b916f]
at unknown [0x7f4a020ac2ea]
at unknown [0x7f4a020ab4ec]
at unknown [0x7f4a020aadad]
at libcoreclr.so(CallDescrWorkerInternal+0x7b) [0x24dcae]
at libcoreclr.so(CallDescrWorkerWithHandler(CallDescrData*, int)+0x74) [0x17dfc4]
at libcoreclr.so(DispatchCallDebuggerWrapper(CallDescrData*, ContextTransitionFrame*, int)+0x86) [0x17e0b6]
at libcoreclr.so(DispatchCallSimple(unsigned long*, unsigned int, unsigned long, unsigned int)+0xb6) [0x17e236]
at libcoreclr.so(MethodTable::RunClassInitEx(Object**)+0x1a1) [0x115d61]
at libcoreclr.so(MethodTable::DoRunClassInitThrowing()+0x2f8) [0x1162e8]
at libcoreclr.so [0x29c00b]
at libcoreclr.so [0x2551cc]
at libcoreclr.so [0x2548c4]
at libcoreclr.so [0x2546b3]
at libcoreclr.so [0x29ba01]
at libcoreclr.so(MethodTable::EnsureInstanceActive()+0x92) [0x115a92]
at libcoreclr.so(MethodDesc::EnsureActive()+0x22) [0x109ae2]
at libcoreclr.so [0x262507]
at libcoreclr.so [0x26291f]
at libcoreclr.so(CorHost2::ExecuteAssembly(unsigned int, char16_t const*, int, char16_t const**, unsigned int*)+0x240) [0xcae90]
at libcoreclr.so(coreclr_execute_assembly+0xd3) [0xa3c63]
at libhostpolicy.so [0x161c2]
at libhostpolicy.so(corehost_main+0xcb) [0x16a1b]
at libhostfxr.so [0x2ab0f]
at libhostfxr.so [0x296a2]
at libhostfxr.so(hostfxr_main_startupinfo+0x92) [0x246f2]
at dotnet [0xc440]
at dotnet [0xc9fd]
at libc.so.6(__libc_start_main+0xea) [0x2409a]
at dotnet(_start+0x28) [0x2f3f]

其他信息

Docker文件如下:

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build-env
WORKDIR /build
COPY /src .
RUN dotnet restore
RUN dotnet build
RUN dotnet publish -c Release -o ./out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
WORKDIR /app
COPY --from=build-env /build/out .
ENTRYPOINT ["dotnet", "Weather.dll"]

这只发生在 K8s 上是不寻常的,作为迁移到 dotnetcore 3.0 的一部分进行测试

在执行dotnet publish时指定runtime标志时,此行为不会更改。

docker version输出

Local docker for windows version: Docker version 19.03.2, build 6a30dfc
Container Runtime Version (on K8s):  docker://18.6.1

一般性评论

不完全确定这里的问题是什么,只要了解错误,我就很高兴。

这是由于 Dynatrace 不支持我们针对的 dotnet core 版本造成的。禁用此功能解决了问题。

最新更新