1

Итак, я знаю, что с помощью каждой команды запуска RUN создается слой или запугивают изображения, если хотите, и что это приводит к кешированию apt-get update . Но у меня очень и очень трудные времена с установкой новых пакетов с помощью apt-get в docker, и я не уверен, что происходит, я потратил часы, пытаясь найти что-то новое, в основном я использую Ubuntu в качестве базы образ.

Некоторые пакеты случайно не устанавливаются, например, wget. Если я захожу в терминал в моем контейнере и выполняю apt-get update то apt-get install wget я могу установить wget. Но в файле docker, даже когда я удаляю все изображения, созданные каждой строкой RUN, чтобы остановить кэширование обновления, я не могу установить wget с точно такими же командами, это абсолютное безумие, и я чувствую, что схожу с ума ,

Другие пакеты, кажется, работают случайным образом и не работают. У меня даже был этот пакет: python-glpk который сначала устанавливался в Dockerfile, но не больше ... Я не вижу каких-либо детерминированных действий для обновления и установки, они, кажется, работают, когда ветер дует только в определенном направлении.

Обновление через Интернет занимает много времени, и я нахожусь на виртуальной машине, поэтому мой рабочий процесс полностью нарушен, потерян так много времени, есть ли у кого-нибудь проблемы с простым apt-get update && apt-get install? Каковы лучшие практики при работе с apt-get в докере, поэтому убедитесь, что все работает как надо?

1 ответ1

0

Какой-нибудь вывод или логи было бы неплохо ответить на ваш вопрос.

Иногда обновление apt-get замедляется, оно не имеет ничего общего с самим докером. Если у вас плохие соединения, пакеты могут не загрузиться полностью.

Как вы сказали, каждая строка в Dockerfile создаст слой изображения, и кэш будет сохранен локально, чтобы ускорить создание изображения. Существуют некоторые методы, позволяющие минимизировать размер образа докера и поместить как можно меньше строк, комбинируя их, поэтому в случае установки пакета используется следующий шаблон:

RUN \
  apt-get update &&\
  apt-get install -y zip &&\
  rm -rf /var/lib/apt/lists/*

Это займет некоторое время, чтобы обновить кэш, установить пакет и очистить пространство, и он сгенерирует только один слой образа, поэтому при любой другой установке пакета вам сначала потребуется apt-get update для установки пакетов.

Один из подходов, который вы можете попробовать, - запустить каждый шаг в новой инструкции RUN:

RUN \
  apt-get update

RUN \
  apt-get install -y zip

RUN \
  apt-get install -y curl

Таким образом, у вас будет больше слоев, но у вас будет "обновленный" слой кэша apt, и вы будете устанавливать пакеты один за другим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .