Невозможно установить пакеты внутри образа 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
ISanych
источник
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 устанавливает последние версии пакетов без дальнейшего кодирования или ручного вмешательства. Этот метод известен как «очистка кэша».

creimers
источник
14

Добавьте следующую команду в Dockerfile:

RUN apt-get update
Гурав Сингла
источник
4

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

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

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

Коннор
источник
1

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

Groboclown
источник
-3

Вам необходимо обновить список пакетов в вашей Ubuntu:

$ sudo apt-get update
$ sudo apt-get install <package_name>
Неназванный-бык
источник