Symlink在Docker映像中丢失

时间:2019-06-07 19:02:59

标签: sqlite docker rust symlink

我正在定义一个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上的注册表中提取相同的映像并运行容器,则可以构建该容器而不会出现任何问题,也不会进行任何更改,因为符号链接实际上已经存在。

可能是问题的原因以及如何解决?

1 个答案:

答案 0 :(得分:0)

经过一番思考之后,我想到了以下想法,这可能会有所帮助。

  • Docker历史记录

Docker命令具有内置功能,可查看内置映像的历史记录。您可以选择在DockerFile中标识有问题的命令。

docker history <image id or name>

对于更直观的过滤,我建议使用dive工具,但其他工具也可以在Google上使用。

  • 正确的docker版本

由于在这种情况下,两个docker实例不同,所以这个问题很简单。它们是否在同一版本的Docker守护程序和Docker文件系统驱动程序上?