Impossible d'installer des packages dans l'image docker Ubuntu

289

J'ai installé l'image Ubuntu 14.04 sur docker. Après cela, lorsque j'essaie d'installer des packages dans l'image ubuntu, je n'arrive pas à localiser l'erreur de package:

apt-get install curl

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

Comment corriger cette erreur?

Développeur
la source

Réponses:

621

C'est parce qu'il n'y a pas de cache de package dans l'image, vous devez exécuter:

apt-get update

avant d'installer des packages, et si votre commande est dans un Dockerfile, vous aurez alors besoin de:

apt-get -y install curl

Pour supprimer la sortie standard d'une commande, utilisez -qq. Par exemple

apt-get -qq -y install curl
ISanych
la source
1
cela fonctionne pour moi, dois-je exécuter -qq pour tout le temps
Développeur
6
-qq supprime la sortie dont vous n'avez généralement pas besoin dans Dockerfile. Une autre astuce intéressante - dites à debconf qu'il fonctionne dans un environnement non interactif: echo 'debconf debconf / frontend select Noninteractive' | debconf-set-selections
ISanych
7
Pour une raison quelconque, cela ne fonctionne pas pour moi, toujours le même message "E: Impossible de localiser le package .."
tblancog
"apt-get-update" et "apt-get install curl" ont bien fonctionné!
Sindhu
J'ai trouvé que cette erreur se produit également dans Docker lorsqu'il manque d'espace. J'ai couru docker image prunepour libérer de l'espace et cela m'a arrangé.
Jonathan Rys
123

De la documentation en mai2017 2018 2019 2020

Combinez toujours RUN apt-get updateavec apt-get installdans la même RUNinstruction, par exemple

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

(...)

L'utilisation apt-get updateseule dans une RUNinstruction entraîne des problèmes de mise en cache et les apt-get installinstructions suivantes échouent.

(...)

L'utilisation RUN apt-get update && apt-get install -ygarantit que votre Dockerfile installe les dernières versions du package sans autre codage ou intervention manuelle. Cette technique est connue sous le nom de «contournement du cache».

creimers
la source
14

Ajoutez la commande suivante dans Dockerfile:

RUN apt-get update
Gourav Singla
la source
4

Assurez-vous que votre Dockerfile ne contient aucune erreur de syntaxe, car cela peut également provoquer cette erreur. Un bon exemple est:

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

C'était une combinaison de correction d'une erreur de syntaxe et d'ajout apt-get updatequi a résolu le problème pour moi.

Connor
la source
1

J'ai constaté que le montage d'un volume local sur / tmp peut provoquer des problèmes d'autorisation lorsque la "mise à jour apt-get" s'exécute, ce qui empêche le cache du package d'être rempli. J'espère que ce n'est pas quelque chose que la plupart des gens font, mais c'est quelque chose d'autre à rechercher si vous voyez ce problème.

Groboclown
la source
-3

Vous devez mettre à jour la liste des paquets dans votre Ubuntu:

$ sudo apt-get update
$ sudo apt-get install <package_name>
taureau sans nom
la source