Невозможно установить пакеты внутри образа Ubuntu докера


289

Я установил образ Ubuntu 14.04 на докер. После этого, когда я пытаюсь установить пакеты внутри образа Ubuntu, я не могу найти ошибку пакета:

apt-get install curl

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package curl

Как исправить эту ошибку?

Ответы:


622

Поскольку в образе нет кэша пакетов, вам нужно выполнить:

apt-get update

перед установкой пакетов, и если ваша команда находится в Dockerfile, вам потребуется:

apt-get -y install curl

Для подавления стандартного вывода команды используйте -qq. Например

apt-get -qq -y install curl

1
это работает для меня, должен ли я всегда запускать -qq
Developer

6
-qq подавляет вывод, который вам обычно не нужен в Dockerfile. Еще один приятный трюк - сообщите debconf, что он работает в неинтерактивной среде: echo 'debconf debconf / frontend select Noninteractive' | debconf-set-selection
ISanych

7
По некоторым причинам это не работает для меня, все еще то же самое сообщение "E: Невозможно найти пакет .."
tblancog

"apt-get-update" и "apt-get install curl" работали нормально!
Синдху

Я обнаружил, что эта ошибка также происходит в докере, когда ему не хватает места. Я побежал, docker image pruneчтобы освободить место, и это исправило это для меня.
Джонатан Рис

123

Из документов в мае2017 2018 2019 2020

Всегда сочетать RUN apt-get updateс apt-get installодним и тем же RUNутверждением, например

RUN apt-get update && apt-get install -y package-bar

(...)

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

(...)

Использование RUN apt-get update && apt-get install -yгарантирует, что ваш Dockerfile устанавливает последние версии пакетов без дальнейшего кодирования или ручного вмешательства. Этот метод известен как «очистка кэша».



4

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

RUN apt-get update \
    && apt-get -y install curl \
    another-package

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


1

Я обнаружил, что монтирование локального тома поверх / tmp может вызвать проблемы с разрешениями при запуске «apt-get update», что препятствует заполнению кэша пакетов. Надеюсь, что это не то, что большинство людей делают, но это то, что нужно искать, если вы видите эту проблему.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.