Обновление apt-get в dockerfile нарушает целостность приложения? - PullRequest
0 голосов
/ 29 августа 2018

В докер-файлах, которые я видел, и в рекомендациях по написанию файла докера: https://docs.docker.com/engine/reference/builder/#copy,, когда apt-get используется для установки некоторых пакетов, apt-get update всегда запускается первым. Я обеспокоен этим, потому что приложение, которое мы создаем в соответствующем контейнере Docker, будет зависеть от этих установленных пакетов. Если в последней версии установленных пакетов есть некоторые несоответствия, то программное обеспечение, которое мы создаем, больше не будет работать правильно. Почему мы не указываем версию пакетов, а вместо этого используем apt-get update?

1 Ответ

0 голосов
/ 29 августа 2018

Со страницы руководства для apt-get:

обновление используется для повторной синхронизации файлов индекса пакета из их источники. Индексы доступных пакетов извлекаются из местоположений, указанных в /etc/apt/sources.list. Например, при использовании архива Debian эта команда получает и сканирует файлы Packages.gz, чтобы информация о новых и обновленных пакетах была имеется в наличии. Обновление всегда следует выполнять перед обновлением или dist-upgrade. Помните, что общий индикатор прогресса будет неверным, так как размер Файлы пакетов не могут быть известны заранее.

Вы можете попробовать запустить apt-get install без запуска update на образе докера, но вы, вероятно, обнаружите, что многие вещи не удастся установить, потому что индексы пакетов устарели.

Как только вы обновите данные пакета, вы можете указать конкретную версию для пакетов при запуске install например,

apt update && apt install -y \
    git=1:2.7.4-0ubuntu1.4

Пример с док-контейнером:

> sudo docker run -it ubuntu:16.04 /bin/bash
# root@513eb786d86d:/# apt install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package git
root@513eb786d86d:/# apt install git=1:2.7.4-0ubuntu1.4
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package git
root@513eb786d86d:/# apt update
...
root@513eb786d86d:/# apt install git=1:2.7.4-0ubuntu1.4
# works this time!
...