在docker中启用apt-get安装的自动完成功能(ubuntu 14.04)


Answers:


11

我知道这很老,但我也遇到了。很明显,借助bash:中的调试模式,失败了set -x

一旦进入docker容器apt install bash-completion,然后编辑用户.bashrc以获取正确的目录,然后注销/登录(基本上按照您引用q / a中的步骤进行操作)。

失败的命令是:

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

那里的“ --no-generate”应该给您一个线索,说明正在发生什么(某些东西,缺少缓存)。如果不运行它,则会返回软件包列表。

这导致我在一些参考链接中搜索了该系统的工作方式,并最终检查了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 "";

请注意,“ pkgcache”为空。尝试在常规安装(例如lxd容器)上进行安装,您会注意到它已设置。这导致我到了存储配置信息的地方/etc/apt/apt.conf.d/。在docker容器上:

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

您会在上面注意到docker映像正在积极地取消设置该值,以防止易于在本地存储缓存文件(以减小映像大小)。我注释掉了该文件中的所有内容,因此该文件现在看起来像:

# 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

参考文献

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.