Неможливо встановити пакети всередині зображення 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

Як виправити цю помилку?

Відповіді:


621

Це тому, що в зображенні відсутній кеш-пакет, потрібно запустити:

apt-get update

перед встановленням пакетів, і якщо ваша команда знаходиться в Dockerfile, вам знадобиться:

apt-get -y install curl

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

apt-get -qq -y install curl

1
це працює для мене, чи потрібно запускати -qq на всі часи
Developer

6
-qq придушити вихід, який вам зазвичай не потрібен в Dockerfile. Ще один приємний трюк - скажіть debconf, що він працює в не інтерактивному середовищі: відлуння «debconf debconf / frontend select Noninteractive» | debconf-set-
select

7
Чомусь це не працює для мене, все одно те саме повідомлення "E: Неможливо знайти пакунок .."
tblancog

"apt-get-update" та "apt-get install curl" спрацювали чудово!
Сіндху

Я виявив, що ця помилка трапляється і в docker, коли у неї не вистачає місця. Я побіг 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.