我正在定义一个Dockerfile,在基于sqlite3
的映像中安装ubuntu
,这非常类似于(我还安装了grpc和rust以及所有必要的依赖项),
FROM ubuntu
RUN apt-get update && \
apt-get install -y sqlite3 libsqlite3-dev&& \
apt-get clean && \
apt-get autoremove
我使用此图像在其中构建我的Rust项目。我面临的问题是由于链接问题,cargo build
在我的GitLab CI上失败了:
Compiling migrations_macros v1.4.0
error: linking with `cc` failed: exit code: 1
...
= note: /usr/bin/ld: cannot find -lsqlite3
我发现这是由于在CI上运行的Docker映像中不存在此符号链接导致的:
libsqlite3.so -> /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
文件libsqlite3.so.0.8.6
存在时。因此,如果我在CI作业期间创建符号链接,则可以有一个解决方法。奇怪的是,如果我从PC上的注册表中提取相同的映像并运行容器,则可以构建该容器而不会出现任何问题,也不会进行任何更改,因为符号链接实际上已经存在。
可能是问题的原因以及如何解决?
答案 0 :(得分:0)
经过一番思考之后,我想到了以下想法,这可能会有所帮助。
Docker命令具有内置功能,可查看内置映像的历史记录。您可以选择在DockerFile中标识有问题的命令。
docker history <image id or name>
对于更直观的过滤,我建议使用dive工具,但其他工具也可以在Google上使用。
由于在这种情况下,两个docker实例不同,所以这个问题很简单。它们是否在同一版本的Docker守护程序和Docker文件系统驱动程序上?