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?

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

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».



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.


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.


-3

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

$ sudo apt-get update
$ sudo apt-get install <package_name>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.