为什么对于存在的命令,会触发命令未找到处理程序?

为什么对于存在的命令,会触发命令未找到处理程序?

我有一个包(在本例中为 Docker),其 Ubuntu 存储库中可用的版本太旧了,因此我将 Docker 存储库添加到我的 apt 源并从那里安装了该包。

现在,对于我的普通用户,当我尝试运行它时,命令未找到处理程序就会启动:

user@host:~$ docker
The program 'docker.io' is currently not installed. You can install it by typing:
sudo apt-get install docker.io

尽管二进制文件确实在我的路径中:

user@host:~$ which docker
/usr/bin/docker

并且我确实对它有执行权限:

user@host:~$ /usr/bin/docker
Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.
....

我尝试过hash -r,尝试过运行一个新的登录 shell,但是无济于事:未找到命令的处理程序仍然启动。

为什么会这样?是因为 Ubuntu 存储库中的包被称为docker.io,而 Docker 存储库中的包被称为 吗docker

我可以在不完全删除的情况下修复此问题command-not-found吗?

编辑:我如何从docker repos安装最新版本:

sudo -i
apt-get purge docker.io
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo "deb https://get.docker.com/ubuntu docker main" >/etc/apt/sources.list.d/docker.list
apt-get update
apt-get install docker

EDIT2:我忘了提及:我检查过 /usr/bin/docker 不是包装脚本:

user@host:~$ file /usr/bin/docker
/usr/bin/docker:  ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=a5773ec80f810b977dc93bb10b4c6c6b8c2b1abd, not stripped

答案1

通常是别名的问题,例如,在你的 bashrc/zshrc 中别名 docker=docker.io... 另外值得检查的是,版本 A 和版本 B 没有一起安装,这通常会导致包和命名冲突。

相关内容