Симлинк потерян в образе Docker - PullRequest
2 голосов
/ 07 июня 2019

Я определяю 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

Я обнаружил, что это связано с тем, что символическая ссылка отсутствует на образе Docker, работающем на CI:

libsqlite3.so -> /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6

пока файл libsqlite3.so.0.8.6 существует. Поэтому, если я создаю символическую ссылку во время заданий CI, у меня может быть рабочий обходной путь. Странная вещь заключается в том, что если я вытяну одно и то же точное изображение из своего реестра на моем компьютере и запустлю контейнер, я смогу создать его без каких-либо проблем и каких-либо изменений, потому что символическая ссылка действительно есть.

В чем может быть причина проблемы и как ее решить?

1 Ответ

0 голосов
/ 07 июня 2019

После долгих размышлений мне приходят на ум следующие идеи, которые могут помочь:

  • История Docker

Команда Docker имеет встроенную функцию для просмотраистория построенного изображения.У вас есть возможность определить проблемную команду в DockerFile.

docker history <image id or name>

Для дополнительной визуальной фильтрации я рекомендую инструмент погружение , но другие также доступны в google.

  • Правильная версия докера

Поскольку в этом сценарии два экземпляра докера различны, вопрос тривиален.Они находятся на одной и той же версии docker daemon и драйвера файловой системы docker?

...