Файлы исчезли в изображении, хотя явно не удалены - PullRequest
0 голосов
/ 15 апреля 2020

У меня странная проблема с Docker образом: в базовом образе в /usr/local установлена ​​библиотека Python. Но после того, как я создаю свое изображение с моим Docker файлом, папка библиотеки почти пуста - остается только файл __pycache__. Я дважды проверил мою Dockerfile, а также точку входа, и, по моему мнению, нет команды, которая могла бы удалить это программное обеспечение. Кроме того, эта проблема возникает только при создании этого образа на облачном сервере. При локальной сборке на моем компьютере с Ubuntu эта проблема не возникает.

В более ранней версии этого образа эта проблема не возникала. Я загрузил эти изображения из реестра и смог найти последнюю версию, которая показывает правильное поведение и первую версию, которая неисправна. Затем я извлек слои из соответствующих файлов tar. Благодаря этому я смог найти слои в тех изображениях, которые отличаются и где различия. В частности, в последнем слое поврежденного изображения ошибочно удаленные библиотечные файлы имеют префикс .wh., что означает, что они удалены в этом слое .

В настоящее время я понятия не имею, почему эти файлы были удалены.

  • Можно ли найти причину этого более точно?
  • Как бы вы отладили проблему такого рода?
  • Почему результат docker image build отличается между моим локальным компьютером и облачным сервером? (кстати, чтобы исключить возможность заражения изображения локальным контекстом сборки, я переключился на каталог fre sh, клонировал код из хранилища и затем собрал образ в этом каталоге)

Я считаю, что в файле json должна быть некоторая полезная информация, которую можно найти в соответствующем layer.tar. Например, кажется, что соответствующая команда, которая создала слой, выглядит примерно так: /bin/sh -c #(nop) EXPOSE 8080. Однако для меня мало смысла, почему такие вещи происходят в этом слое. Я не вручную изменил изображение, например, с помощью чего-то вроде docker commit.

Для иллюстрации, мой Dockerfile:

FROM base-image:1.0.0

ENV PYTHONPATH="/usr/local/my-library/lib/:$PYTHONPATH"  # I need this lib, but it disappears in the last layer

COPY . /home/task/

WORKDIR /home/task

RUN mkdir -p log resources \
    && find . -type d -exec chmod -R 550 {} \; \
    && find . -type f -exec chmod 440 {} \; \
    && chmod -R +w log resources \
    && chmod +x run.sh manage.py \
    && chown -R task:taskgroup \
    && pip install --no-cache-dir requirements.txt \
    && python download_and_extract.py "https://example.com/large-file.tar.gz" "resources/downloaded_file.tar.gz" \
    && rm -v resources/downloaded_file.tar.gz

USER task:taskgroup

ENTRYPOINT ["./run.sh"]
EXPOSE 8080  # I suppose, this is the layer in which the library magically disappears
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...