sqlite - Docker 映像中的符号链接丢失
问题描述
我正在定义一个 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 作业期间创建符号链接,我可以有一个可行的解决方法。奇怪的是,如果我从我的电脑上的注册表中提取相同的确切图像并运行容器,我可以构建没有任何问题和任何更改,因为符号链接实际上存在。
问题的原因可能是什么以及如何解决?
解决方案
经过相当多的思考后,我想到了以下想法,这可能会有所帮助。
- 码头工人历史
Docker 命令具有内置功能,可以查看构建映像的历史记录。您可以选择在 DockerFile 中识别有问题的命令。
docker history <image id or name>
对于更多的视觉过滤,我推荐潜水工具,但其他工具也可以在谷歌上找到。
- 正确的码头工人版本
由于在这种情况下,两个 docker 实例是不同的,所以这个问题是微不足道的。它们是否在同一版本的 docker daemon 和 docker 文件系统驱动程序上?
推荐阅读
- javascript - fs.append 到已经存在的 JSON 行
- javascript - 根据与坐标的距离,生成分数。(距离越小=>得分越高)
- java - 7.4.8 用户数据清理代码Hs java
- excel - 奇怪和不正确的 Excel 公式结果?
- python - 将额外的参数传递给 auth url
- python - 如何使用 html.xpath 在 Python 上选择特定的 HTML 超文本标记
- excel - 在 Javascript Chart API 中找不到 Excel
- c# - 作为 Windows 服务运行的 .NET Core 2 应用程序无法将 BasePath 设置为可执行位置
- html - 跳过 HTML 中的数组元素
- c# - 如何格式化制表符分隔文件中的列?