在构建Docker镜像时,为了保持最终镜像的大小一般习惯选用Alpine Linux作为基础镜像,但是如果你的项目使用了动态链接库的情况下一定要谨慎选择。我们一个项目中动态库基于C++6构建,结果发现动态库依赖报错,使用ldd命令检查依赖,发现其中报了Error loading shared library libgcc_s.so.1: No such file or directory 和Error loading shared library ld-linux-x86-64.so.2: No such file or directory

其中的libgcc依赖好解决,直接安装apk add libstdc++ 就可以,但是ld-linux-x86-64.so.2 他是属于glibc里的,在Alpine里无法找到,网上差了原因是因为Alpine linux使用的是musl,与常见的glibc不同,Musl是一个轻量级的C标准库,基本上只能通过手动编译安装十分麻烦。

果断替换基础镜像到Buster:buster是基于Debian Linux发行的一个版本,这个版本比较新,支持比较全面,受广大Debian爱好者的好评!所以像PHP、Python之类的语言、应用都会使用这个版本的Debian搭建Docker基础镜像。