如何使 libdb2.so 文件对 DB2 包可见?我已经验证该包可以在 Ubuntu 中运行,但无法使其在 Docker 中运行。
Dockerfile
FROM microsoft/aspnetcore:1.0
#assume the built app is in /app from the build so that the entrypoint command runs in the correct path
WORKDIR /app
#need to specify db2 driver lib
ENV LD_LIBRARY_PATH="/app/db2Lib"
#move all the source code in local directory ./app into the container directory /app
COPY ./app .
RUN mkdir -p db2Lib
ADD db2Lib db2Lib/
ADD ./runImage.sh .
RUN chmod -R a+wrx runImage.sh
EXPOSE 8080
ENTRYPOINT ["./runImage.sh"]
运行图像.sh
#!/bin/bash
ls $LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH
dotnet app.dll
运行图像后,我在控制台中得到以下打印结果
#from ls $LD_LIBRARY_PATH
icc
libDB2xml4c.so
libDB2xml4c.so.58
libDB2xml4c.so.58.0
libdb2.so
libdb2.so.1
libdb2clixml4c.so
libdb2clixml4c.so.1
libdb2o.so
libdb2o.so.1
#from echo $LD_LIBRARY_PATH
/app/db2Lib
但是当我的应用程序运行时,我收到以下错误
未处理的异常:System.DllNotFoundException:无法加载 DLL
“libdb2.so”:找不到指定的模块。
如您所见,LD_LIBRARY_PATH 环境变量正确指向正确的目录,如文档中所述https://www.ibm.com/developerworks/community/blogs/96960515-2ea1-4391-8170-b0515d08e4da/entry/Instructions_for_downloading_and_using_DB2_NET_Core_provider_package?lang=en https://www.ibm.com/developerworks/community/blogs/96960515-2ea1-4391-8170-b0515d08e4da/entry/Instructions_for_downloading_and_using_DB2_NET_Core_provider_package?lang=en.
为了仔细检查环境变量是否已设置,我这样做
Console.WriteLine(Configuration["LD_LIBRARY_PATH"]);
确实打印了
/应用程序/db2Lib
对于任何未来的参考,这里是blog https://www.ibm.com/developerworks/community/blogs/96960515-2ea1-4391-8170-b0515d08e4da/entry/Using_NET_Core?lang=en它解释了让它在 Docker 上运行需要什么。该示例与控制台应用程序相关,但也适用于其他类型的应用程序。
综上所述,系统中需要有libxml2.so.2.7.6。如果没有,可以下载并保存在lib文件夹中。这个libxml2.so.2需要链接到libdb2.so
ln <libpath>/libxml2.so.2.7.6 <libpath>/libxml2.so.2
In the application's DockerFile, these two entries should be there before the entry point
ENV LD_LIBRARY_PATH="<libpath>"
Env PATH=$PATH:"<libpath>/bin:<libpath>/lib"
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)