参考

参考

我正在docker中运行一个ubuntu容器。我尝试了网上找到的所有方法,包括:

自动完成功能对“sudo apt-get install”不起作用

但按“tab”仍然没有效果

答案1

我知道这已经过时了,但我也遇到过这种情况。借助 bash 中的调试模式,可以清楚地了解失败的原因:set -x

进入 docker 容器后apt install bash-completion,编辑用户.bashrc以获取正确的目录,然后注销/登录(基本上按照你提到的问题

失败的命令是:

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

其中的“--no-generate”应该会提示发生了什么(某些东西,某些东西,缓存丢失)。如果您在没有它的情况下运行,则会返回软件包列表。

这导致我在一些参考链接中搜索这个系统应该如何工作,并最终检查了适当的配置:

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 "";

请注意,“pkgcache”是空的。在正常安装(如 lxd 容器)上尝试一下,您会注意到它已设置。这让我找到了存储配置信息的地方。/etc/apt/apt.conf.d/在 docker 容器上:

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

您会注意到,docker images 正在主动取消设置此值,以防止 apt 在本地存储缓存文件(以减小镜像大小)。我注释掉了该文件中的所有内容,因此该文件现在如下所示:

# 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 "";

现在一切正常(运行apt update一次后:

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

参考

这些帮助我弄清楚了这个系统是如何工作的......

相关内容