.Net Core Linux - Docker - 使用 DB2 进行本地调试
.Net Core Linux - Docker - Local debugging with DB2
.Net Core (3.1) Web API 使用 Docker(Linux 容器)。
我通过 nuget 包建立了 Db2 连接 IBM.Data.DB2.Core-lnx (3.1.0.300).
当我独立于 VisualStudio 2019 构建和 运行 我的 Docker 文件时,此 Db2 连接工作正常。
但是,当尝试通过 VS(快速模式)进行调试时,我 运行 进入了这个异常:
Unable to load shared library 'libdb2.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibdb2.so: cannot open shared object file: No such file or directory
我猜这种定位资源失败是因为快速模式调试与 Docker 容器的工作方式有关。将应用程序输出复制到装载后,我的 IBM ENV 变量无法找到 NuGet clidriver 文件夹。这些通常看起来像这样:
ENV DB2_CLI_DRIVER_INSTALL_PATH="/app/clidriver" \
LD_LIBRARY_PATH="/app/clidriver/lib" \
LIBPATH="/app/clidriver/lib" \
PATH=$PATH:"/app/clidriver/bin:/app/clidriver/lib:/app/clidriver/adm"
如何更新它们以指向已安装的应用程序内容?假设这是问题所在...
*请注意,我正在我的 Docker 文件的基础上安装软件包 libxml2-dev。
如果有人有在 Linux 容器中调试 Db2 连接的成功策略,我很想听听你做了什么。非常感谢。
运行 调试容器上的 shell 让我可以看到挂载的内容并获取 clidriver 路径。在 Db2 环境变量中设置此项修复了问题:
ENV DB2_CLI_DRIVER_INSTALL_PATH="/app/bin/Debug/netcoreapp3.1/clidriver" \
LD_LIBRARY_PATH="/app/bin/Debug/netcoreapp3.1/clidriver/lib" \
LIBPATH="/app/bin/Debug/netcoreapp3.1/clidriver/lib" \
PATH=$PATH:"/app/bin/Debug/netcoreapp3.1/clidriver/bin:/app/bin/Debug/netcoreapp3.1/clidriver/lib:/app/bin/Debug/netcoreapp3.1/clidriver/adm"
我面对这些问题差不多一个星期了,很高兴能解决这个问题。
解决方案:
LD_LIBRARY_PATH=<app release folder path>/netcoreapp3.1/clidriver/lib
当您包含 LD_LIBRARY_PATH 变量时,PATH 值将与“../root/usr/lib64”
一起附加到现有值
请注意,如果您不包含 LD_LIBRARY_PATH 广告连播将会出错。
.Net Core (3.1) Web API 使用 Docker(Linux 容器)。
我通过 nuget 包建立了 Db2 连接 IBM.Data.DB2.Core-lnx (3.1.0.300).
当我独立于 VisualStudio 2019 构建和 运行 我的 Docker 文件时,此 Db2 连接工作正常。
但是,当尝试通过 VS(快速模式)进行调试时,我 运行 进入了这个异常:
Unable to load shared library 'libdb2.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibdb2.so: cannot open shared object file: No such file or directory
我猜这种定位资源失败是因为快速模式调试与 Docker 容器的工作方式有关。将应用程序输出复制到装载后,我的 IBM ENV 变量无法找到 NuGet clidriver 文件夹。这些通常看起来像这样:
ENV DB2_CLI_DRIVER_INSTALL_PATH="/app/clidriver" \
LD_LIBRARY_PATH="/app/clidriver/lib" \
LIBPATH="/app/clidriver/lib" \
PATH=$PATH:"/app/clidriver/bin:/app/clidriver/lib:/app/clidriver/adm"
如何更新它们以指向已安装的应用程序内容?假设这是问题所在...
*请注意,我正在我的 Docker 文件的基础上安装软件包 libxml2-dev。
如果有人有在 Linux 容器中调试 Db2 连接的成功策略,我很想听听你做了什么。非常感谢。
运行 调试容器上的 shell 让我可以看到挂载的内容并获取 clidriver 路径。在 Db2 环境变量中设置此项修复了问题:
ENV DB2_CLI_DRIVER_INSTALL_PATH="/app/bin/Debug/netcoreapp3.1/clidriver" \
LD_LIBRARY_PATH="/app/bin/Debug/netcoreapp3.1/clidriver/lib" \
LIBPATH="/app/bin/Debug/netcoreapp3.1/clidriver/lib" \
PATH=$PATH:"/app/bin/Debug/netcoreapp3.1/clidriver/bin:/app/bin/Debug/netcoreapp3.1/clidriver/lib:/app/bin/Debug/netcoreapp3.1/clidriver/adm"
我面对这些问题差不多一个星期了,很高兴能解决这个问题。
解决方案:
LD_LIBRARY_PATH=<app release folder path>/netcoreapp3.1/clidriver/lib
当您包含 LD_LIBRARY_PATH 变量时,PATH 值将与“../root/usr/lib64”
一起附加到现有值请注意,如果您不包含 LD_LIBRARY_PATH 广告连播将会出错。