首页 > 解决方案 > 在 Kubernetes 上运行 dotnet core 3.0 docker 映像时出错

问题描述

重现问题的步骤

  1. 使用 dotnet CLI (dotnet --version = 3.0.100) 创建 webapi 项目模板
  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]

附加信息

dockerfile 如下:

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 的一部分进行测试的

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

的输出docker version

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

普通的留言

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

标签: dockerkubernetes.net-core

解决方案


这是因为 Dynatrace 不支持我们所针对的 dotnet core 版本。禁用此功能可解决问题。


推荐阅读