我docker-compose
按照以下说明在我的 Ubuntu 16.04 机器上进行了安装https://docs.docker.com/compose/install/使用curl
直接下载二进制文件到/usr/local/bin/
:
$ ls -lh /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 16M Jul 11 15:55 /usr/local/bin/docker-compose
/usr/local/bin/
在我的 PATH 中:
$ echo $PATH
/home/me/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/usr/bin
请注意,实际上它位于 之前。
当我尝试检查其版本时,我收到了似乎与 PATH 相关的错误:
$ docker-compose --version
bash: /usr/bin/docker-compose: No such file or directory
通过指定可执行文件的完整路径,我得到了正确的行为,
$ /usr/local/bin/docker-compose --version
docker-compose version 1.24.0, build 0aa59064
sudo
或者使用
$ sudo docker-compose --version
docker-compose version 1.24.0, build 0aa59064
为什么我不能运行$ docker-compose --version
?为什么 Bash 特别抱怨/usr/bin
,而它应该在 中找到可执行文件/usr/local/bin
?
这可能与我之前docker-compose
通过安装有关apt
,但我已删除并清除了这个包。
答案1
您已在一个位置安装了 docker-compose。然后您将其删除并在另一个位置安装。
这样,您就遇到了 bash 的优化,因为每次输入命令时都不必搜索 $PATH,方法是将结果缓存在内存中。路径哈希是一个哈希表,由 bash 维护,其中包含运行命令时 shell 应在磁盘上查找可执行程序的位置。如果发生明显使结果无效的事件(例如修改 $PATH),或者使用内置命令,哈希表就会被清除hash
。
当您再次执行 docker-compose 时,bash 只是尝试从上次找到它的地方获取它,但它已经不再存在,因此您收到该错误消息。
要使 docker-compose 的哈希无效,请运行以下命令:
hash docker-compose
答案2
问题似乎是以前安装中存在的定位条目,apt-get remove
并且apt-get purge
没有被删除或清除。
hash docker-compose
删除该条目。更多信息可以在这里找到:
https://github.com/docker/compose/issues/3371#issuecomment-381162525 https://unix.stackexchange.com/questions/82991/bash-is-not-finding-a-program-even-though-its-on-my-path
答案3
使用 Snap 安装 Docker 后,您从 snap 中删除了 docker 并在没有 snap 的情况下进行了安装,但路径仍然指向位置 /snap/bin/docker,因此如果出现此错误,请更新 PATH 的值以获取预期输出。
答案4
我使用 snap 删除了现有的 docker,并安装了最新的 docker。我看到了同样的问题。我尝试运行“hash docker-compose”,但我的系统找不到“hash”命令。我关闭终端并重新打开另一个终端,问题就消失了。