activation de l'achèvement automatique pour l'installation d'apt-get dans Docker (Ubuntu 14.04)

Réponses:

11

Je sais que c'est vieux, mais je l'ai rencontré aussi. Il est clair que échoue avec l'aide du mode de débogage dans bash: set -x.

Une fois que vous obtenez votre dans votre conteneur Docker et apt install bash-completion, et éditez vos utilisateurs .bashrcpour trouver le bon répertoire, et vous déconnecter / vous connecter (suivez essentiellement les étapes du q / a que vous avez référencé .

La commande qui échoue est:

# apt-cache --no-generate pkgnames firefox
E: Could not open file  - open (2: No such file or directory)

Le '--no-generate' devrait vous donner une idée de ce qui se passe (quelque chose, quelque chose, le cache est manquant). Si vous courez sans, vous récupérez une liste de packages.

Cela m'a amené à rechercher dans certains de mes liens de référence la façon dont ce système est censé fonctionner, et finalement à inspecter la configuration apt:

root@edb76551d1dd:/var/cache/apt# apt-config dump |grep Dir::C
Dir::Cache "var/cache/apt/";
Dir::Cache::archives "archives/";
Dir::Cache::srcpkgcache "";
Dir::Cache::pkgcache "";

Notez que «pkgcache» est vide. Essayez cela sur une installation normale (comme un conteneur lxd), et vous remarquerez qu'il est défini. Cela m'a conduit à l'endroit que les informations de configuration sont stockées, /etc/apt/apt.conf.d/. Sur le conteneur docker:

# grep cache *
[...]
docker-clean:Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";

Vous remarquerez ci-dessus que les images de docker désactive activement cette valeur, pour éviter de stocker le fichier cache localement (pour réduire la taille de l'image). J'ai tout commenté dans ce fichier, donc le fichier ressemble maintenant à:

# file: /etc/apt/apt.conf.d/docker-clean 
#DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
#APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
#Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";

Et maintenant, les choses fonctionnent (après avoir exécuté apt updateune fois:

# apt update
[...]        
# apt install firefox-d<tab>   
firefox-dbg  firefox-dev

Références

Cela m'a aidé à comprendre comment ce système fonctionnait ...

dpb
la source