Docker 已經安裝好了,但是使用 docker 命令時 不能自動補齊,即輸入 docker 命令后,按 Tab 鍵無法列出子命令(或參數)的候選項。
一、自動補全命令機制:
Linux 系統許多命令都會提供該命令自身的命令補齊腳本,在安裝命令時會自動安裝自動補齊腳本,如果有的話,該機制在Linux中被稱為 bash-complete。
在 /usr/share/bash-completion/completions/ 目錄下有許多命令自動補齊的腳本,可自行查閱。
與 docker 有關的,有 2 個文件: docker 和 docker-compose。如下:
[root@docker ~]# ls /usr/share/bash-completion/completions/docker* /usr/share/bash-completion/completions/docker /usr/share/bash-completion/completions/docker-compose
(備注:如果沒有安裝 docker compose,那么只有一個 docker 自動補齊腳本)
自動補齊需要依賴工具 bash-complete,如果沒有,則需要手動安裝,命令如下:
[root@docker ~]# yum -y install bash-completion
安裝成功后,得到文件為 /usr/share/bash-completion/bash_completion ,如果沒有這個文件,則說明系統上沒有安裝這個工具。
二、實踐
讓配置腳本生效的方法是執行 source xxx 命令,先執行 source /usr/share/bash-completion/completions/docker,再輸入 docker,然后按2次 Tab鍵,提示錯誤如下:
[root@docker ~]# docker (docker + 空格 + 連續按2次Tab鍵) docker bash: _get_comp_words_by_ref: command not found bash: [: : integer expression expected bash: [: : integer expression expected bash: [: : integer expression expected bash: _get_comp_words_by_ref: command not found bash: [: : integer expression expected bash: [: : integer expression expected bash: [: : integer expression expected
注:第一行的docker,實際是輸入的命令,其它是按Tab鍵的輸出信息。
前面已經安裝了 bash_completion,執行如下命令:
[root@docker ~]# source /usr/share/bash-completion/bash_completion
再次嘗試,發現可以正常列出docker的子命令,示例如下:
[root@docker ~]# docker (docker + 空格 + 連續按2次Tab鍵) attach container engine history inspect logs port restart search stats top volume build context events image kill network ps rm secret stop trust wait builder cp exec images load node pull rmi service swarm unpause commit create export import login pause push run stack system update config diff help info logout plugin rename save start tag version
嘗試 Docker 容器名稱的自動補齊功能,示例如下:
[root@docker ~]# docker logs izheng- (注:輸入izheng-后按2次Tab鍵) izheng-wordpress izheng-apache izheng-mysql izheng-zentao izheng-gitlab izheng-jenkins
若安裝了 Docker Compose,則也可事實 docker-compose 命令的自動補齊功能。
重啟系統后,也能進行自動補齊。