Ubuntu リポジトリで利用できるバージョンが古すぎるパッケージ (この場合は Docker) があったので、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
、新しいログイン シェルを実行しようとしましたが、うまくいきませんでした。コマンドが見つからないハンドラーが引き続き起動します。
なぜそのように動作するのでしょうか? Ubuntu リポジトリのパッケージは と呼ばれていますdocker.io
が、Docker リポジトリのパッケージは と呼ばれているだけなのでしょうかdocker
?
完全に削除せずにこの問題を修正できますかcommand-not-found
?
編集: Docker リポジトリから最新バージョンをインストールする方法:
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
編集2: 言及するのを忘れていましたが、/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 の alias docker=docker.io などです。また、バージョン A とバージョン B が一緒にインストールされていないことも確認する価値があります。これにより、パッケージと名前の競合が発生することがよくあります。