安装 docker-compose

  1. 最新发行的版本地址:https://github.com/docker/compose/releases
  2. 运行以下命令以下载Docker Compose的当前稳定版本:

sudo curl -L “https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
注意: 如果无法下载,可以本地下载好后上传到服务器即可

  1. 将可执行权限应用于二进制文件:

mv docker-compose /usr/local/bin
sudo chmod +x /usr/local/bin/docker-compose
注意:如果命令docker-compose在安装后失败,请检查您的路径。您还可以创建指向/usr/bin或路径中任何其他目录的符号链接。

  1. 测试安装

docker-compose —version

bash 命令补齐

curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version —short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

安装Compose命令补全工具遇到的错误

curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version —short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
原因分析:
地址https://raw.githubusercontent.com无法访问
解决办法:
直接找到这个文件在github上的地址,然后手动复制粘贴下来
地址:https://github.com/docker/compose/blob/master/contrib/completion/bash/docker-compose
具体步骤:
地址:https://github.com/docker/compose
image.png
image.png
image.png
image.png
image.png
看文件内容开头,有两种添加方法,这里采用第一种方法:
vim /etc/bash_completion.d/docker-compose
把下面的内容给添加进去,然后关闭终端,重新打开一个终端,就生效可以使用了
文件下载地址:https://files.cnblogs.com/files/sanduzxcvbnm/docker-compose.7z
下载后直接解压缩上传到/etc/bash_completion.d/路径下即可
文件内容

  1. #!/bin/bash
  2. #
  3. # bash completion for docker-compose
  4. #
  5. # This work is based on the completion for the docker command.
  6. #
  7. # This script provides completion of:
  8. # - commands and their options
  9. # - service names
  10. # - filepaths
  11. #
  12. # To enable the completions either:
  13. # - place this file in /etc/bash_completion.d
  14. # or
  15. # - copy this file to e.g. ~/.docker-compose-completion.sh and add the line
  16. # below to your .bashrc after bash completion features are loaded
  17. # . ~/.docker-compose-completion.sh
  18. __docker_compose_previous_extglob_setting=$(shopt -p extglob)
  19. shopt -s extglob
  20. __docker_compose_q() {
  21. docker-compose 2>/dev/null "${top_level_options[@]}" "$@"
  22. }
  23. # Transforms a multiline list of strings into a single line string
  24. # with the words separated by "|".
  25. __docker_compose_to_alternatives() {
  26. local parts=( $1 )
  27. local IFS='|'
  28. echo "${parts[*]}"
  29. }
  30. # Transforms a multiline list of options into an extglob pattern
  31. # suitable for use in case statements.
  32. __docker_compose_to_extglob() {
  33. local extglob=$( __docker_compose_to_alternatives "$1" )
  34. echo "@($extglob)"
  35. }
  36. # Determines whether the option passed as the first argument exist on
  37. # the commandline. The option may be a pattern, e.g. `--force|-f`.
  38. __docker_compose_has_option() {
  39. local pattern="$1"
  40. for (( i=2; i < $cword; ++i)); do
  41. if [[ ${words[$i]} =~ ^($pattern)$ ]] ; then
  42. return 0
  43. fi
  44. done
  45. return 1
  46. }
  47. # Returns `key` if we are currently completing the value of a map option (`key=value`)
  48. # which matches the extglob passed in as an argument.
  49. # This function is needed for key-specific completions.
  50. __docker_compose_map_key_of_current_option() {
  51. local glob="$1"
  52. local key glob_pos
  53. if [ "$cur" = "=" ] ; then # key= case
  54. key="$prev"
  55. glob_pos=$((cword - 2))
  56. elif [[ $cur == *=* ]] ; then # key=value case (OSX)
  57. key=${cur%=*}
  58. glob_pos=$((cword - 1))
  59. elif [ "$prev" = "=" ] ; then
  60. key=${words[$cword - 2]} # key=value case
  61. glob_pos=$((cword - 3))
  62. else
  63. return
  64. fi
  65. [ "${words[$glob_pos]}" = "=" ] && ((glob_pos--)) # --option=key=value syntax
  66. [[ ${words[$glob_pos]} == @($glob) ]] && echo "$key"
  67. }
  68. # suppress trailing whitespace
  69. __docker_compose_nospace() {
  70. # compopt is not available in ancient bash versions
  71. type compopt &>/dev/null && compopt -o nospace
  72. }
  73. # Outputs a list of all defined services, regardless of their running state.
  74. # Arguments for `docker-compose ps` may be passed in order to filter the service list,
  75. # e.g. `status=running`.
  76. __docker_compose_services() {
  77. __docker_compose_q ps --services "$@"
  78. }
  79. # Applies completion of services based on the current value of `$cur`.
  80. # Arguments for `docker-compose ps` may be passed in order to filter the service list,
  81. # see `__docker_compose_services`.
  82. __docker_compose_complete_services() {
  83. COMPREPLY=( $(compgen -W "$(__docker_compose_services "$@")" -- "$cur") )
  84. }
  85. # The services for which at least one running container exists
  86. __docker_compose_complete_running_services() {
  87. local names=$(__docker_compose_services --filter status=running)
  88. COMPREPLY=( $(compgen -W "$names" -- "$cur") )
  89. }
  90. _docker_compose_build() {
  91. case "$prev" in
  92. --build-arg)
  93. COMPREPLY=( $( compgen -e -- "$cur" ) )
  94. __docker_compose_nospace
  95. return
  96. ;;
  97. --memory|-m)
  98. return
  99. ;;
  100. esac
  101. case "$cur" in
  102. -*)
  103. COMPREPLY=( $( compgen -W "--build-arg --compress --force-rm --help --memory -m --no-cache --no-rm --pull --parallel -q --quiet" -- "$cur" ) )
  104. ;;
  105. *)
  106. __docker_compose_complete_services --filter source=build
  107. ;;
  108. esac
  109. }
  110. _docker_compose_config() {
  111. case "$prev" in
  112. --hash)
  113. if [[ $cur == \\* ]] ; then
  114. COMPREPLY=( '\*' )
  115. else
  116. COMPREPLY=( $(compgen -W "$(__docker_compose_services) \\\* " -- "$cur") )
  117. fi
  118. return
  119. ;;
  120. esac
  121. COMPREPLY=( $( compgen -W "--hash --help --no-interpolate --profiles --quiet -q --resolve-image-digests --services --volumes" -- "$cur" ) )
  122. }
  123. _docker_compose_create() {
  124. case "$cur" in
  125. -*)
  126. COMPREPLY=( $( compgen -W "--build --force-recreate --help --no-build --no-recreate" -- "$cur" ) )
  127. ;;
  128. *)
  129. __docker_compose_complete_services
  130. ;;
  131. esac
  132. }
  133. _docker_compose_docker_compose() {
  134. case "$prev" in
  135. --tlscacert|--tlscert|--tlskey)
  136. _filedir
  137. return
  138. ;;
  139. --file|-f)
  140. _filedir "y?(a)ml"
  141. return
  142. ;;
  143. --ansi)
  144. COMPREPLY=( $( compgen -W "never always auto" -- "$cur" ) )
  145. return
  146. ;;
  147. --log-level)
  148. COMPREPLY=( $( compgen -W "debug info warning error critical" -- "$cur" ) )
  149. return
  150. ;;
  151. --profile)
  152. COMPREPLY=( $( compgen -W "$(__docker_compose_q config --profiles)" -- "$cur" ) )
  153. return
  154. ;;
  155. --project-directory)
  156. _filedir -d
  157. return
  158. ;;
  159. --env-file)
  160. _filedir
  161. return
  162. ;;
  163. $(__docker_compose_to_extglob "$daemon_options_with_args") )
  164. return
  165. ;;
  166. esac
  167. case "$cur" in
  168. -*)
  169. COMPREPLY=( $( compgen -W "$daemon_boolean_options $daemon_options_with_args $top_level_options_with_args --help -h --no-ansi --verbose --version -v" -- "$cur" ) )
  170. ;;
  171. *)
  172. COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
  173. ;;
  174. esac
  175. }
  176. _docker_compose_down() {
  177. case "$prev" in
  178. --rmi)
  179. COMPREPLY=( $( compgen -W "all local" -- "$cur" ) )
  180. return
  181. ;;
  182. --timeout|-t)
  183. return
  184. ;;
  185. esac
  186. case "$cur" in
  187. -*)
  188. COMPREPLY=( $( compgen -W "--help --rmi --timeout -t --volumes -v --remove-orphans" -- "$cur" ) )
  189. ;;
  190. esac
  191. }
  192. _docker_compose_events() {
  193. case "$prev" in
  194. --json)
  195. return
  196. ;;
  197. esac
  198. case "$cur" in
  199. -*)
  200. COMPREPLY=( $( compgen -W "--help --json" -- "$cur" ) )
  201. ;;
  202. *)
  203. __docker_compose_complete_services
  204. ;;
  205. esac
  206. }
  207. _docker_compose_exec() {
  208. case "$prev" in
  209. --index|--user|-u|--workdir|-w)
  210. return
  211. ;;
  212. esac
  213. case "$cur" in
  214. -*)
  215. COMPREPLY=( $( compgen -W "-d --detach --help --index --privileged -T --user -u --workdir -w" -- "$cur" ) )
  216. ;;
  217. *)
  218. __docker_compose_complete_running_services
  219. ;;
  220. esac
  221. }
  222. _docker_compose_help() {
  223. COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
  224. }
  225. _docker_compose_images() {
  226. case "$cur" in
  227. -*)
  228. COMPREPLY=( $( compgen -W "--help --quiet -q" -- "$cur" ) )
  229. ;;
  230. *)
  231. __docker_compose_complete_services
  232. ;;
  233. esac
  234. }
  235. _docker_compose_kill() {
  236. case "$prev" in
  237. -s)
  238. COMPREPLY=( $( compgen -W "SIGHUP SIGINT SIGKILL SIGUSR1 SIGUSR2" -- "$(echo $cur | tr '[:lower:]' '[:upper:]')" ) )
  239. return
  240. ;;
  241. esac
  242. case "$cur" in
  243. -*)
  244. COMPREPLY=( $( compgen -W "--help -s" -- "$cur" ) )
  245. ;;
  246. *)
  247. __docker_compose_complete_running_services
  248. ;;
  249. esac
  250. }
  251. _docker_compose_logs() {
  252. case "$prev" in
  253. --tail)
  254. return
  255. ;;
  256. esac
  257. case "$cur" in
  258. -*)
  259. COMPREPLY=( $( compgen -W "--follow -f --help --no-color --no-log-prefix --tail --timestamps -t" -- "$cur" ) )
  260. ;;
  261. *)
  262. __docker_compose_complete_services
  263. ;;
  264. esac
  265. }
  266. _docker_compose_pause() {
  267. case "$cur" in
  268. -*)
  269. COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
  270. ;;
  271. *)
  272. __docker_compose_complete_running_services
  273. ;;
  274. esac
  275. }
  276. _docker_compose_port() {
  277. case "$prev" in
  278. --protocol)
  279. COMPREPLY=( $( compgen -W "tcp udp" -- "$cur" ) )
  280. return;
  281. ;;
  282. --index)
  283. return;
  284. ;;
  285. esac
  286. case "$cur" in
  287. -*)
  288. COMPREPLY=( $( compgen -W "--help --index --protocol" -- "$cur" ) )
  289. ;;
  290. *)
  291. __docker_compose_complete_services
  292. ;;
  293. esac
  294. }
  295. _docker_compose_ps() {
  296. local key=$(__docker_compose_map_key_of_current_option '--filter')
  297. case "$key" in
  298. source)
  299. COMPREPLY=( $( compgen -W "build image" -- "${cur##*=}" ) )
  300. return
  301. ;;
  302. status)
  303. COMPREPLY=( $( compgen -W "paused restarting running stopped" -- "${cur##*=}" ) )
  304. return
  305. ;;
  306. esac
  307. case "$prev" in
  308. --filter)
  309. COMPREPLY=( $( compgen -W "source status" -S "=" -- "$cur" ) )
  310. __docker_compose_nospace
  311. return;
  312. ;;
  313. esac
  314. case "$cur" in
  315. -*)
  316. COMPREPLY=( $( compgen -W "--all -a --filter --help --quiet -q --services" -- "$cur" ) )
  317. ;;
  318. *)
  319. __docker_compose_complete_services
  320. ;;
  321. esac
  322. }
  323. _docker_compose_pull() {
  324. case "$cur" in
  325. -*)
  326. COMPREPLY=( $( compgen -W "--help --ignore-pull-failures --include-deps --no-parallel --quiet -q" -- "$cur" ) )
  327. ;;
  328. *)
  329. __docker_compose_complete_services --filter source=image
  330. ;;
  331. esac
  332. }
  333. _docker_compose_push() {
  334. case "$cur" in
  335. -*)
  336. COMPREPLY=( $( compgen -W "--help --ignore-push-failures" -- "$cur" ) )
  337. ;;
  338. *)
  339. __docker_compose_complete_services
  340. ;;
  341. esac
  342. }
  343. _docker_compose_restart() {
  344. case "$prev" in
  345. --timeout|-t)
  346. return
  347. ;;
  348. esac
  349. case "$cur" in
  350. -*)
  351. COMPREPLY=( $( compgen -W "--help --timeout -t" -- "$cur" ) )
  352. ;;
  353. *)
  354. __docker_compose_complete_running_services
  355. ;;
  356. esac
  357. }
  358. _docker_compose_rm() {
  359. case "$cur" in
  360. -*)
  361. COMPREPLY=( $( compgen -W "--force -f --help --stop -s -v" -- "$cur" ) )
  362. ;;
  363. *)
  364. if __docker_compose_has_option "--stop|-s" ; then
  365. __docker_compose_complete_services
  366. else
  367. __docker_compose_complete_services --filter status=stopped
  368. fi
  369. ;;
  370. esac
  371. }
  372. _docker_compose_run() {
  373. case "$prev" in
  374. -e)
  375. COMPREPLY=( $( compgen -e -- "$cur" ) )
  376. __docker_compose_nospace
  377. return
  378. ;;
  379. --entrypoint|--label|-l|--name|--user|-u|--volume|-v|--workdir|-w)
  380. return
  381. ;;
  382. esac
  383. case "$cur" in
  384. -*)
  385. COMPREPLY=( $( compgen -W "--detach -d --entrypoint -e --help --label -l --name --no-deps --publish -p --rm --service-ports -T --use-aliases --user -u --volume -v --workdir -w" -- "$cur" ) )
  386. ;;
  387. *)
  388. __docker_compose_complete_services
  389. ;;
  390. esac
  391. }
  392. _docker_compose_scale() {
  393. case "$prev" in
  394. =)
  395. COMPREPLY=("$cur")
  396. return
  397. ;;
  398. --timeout|-t)
  399. return
  400. ;;
  401. esac
  402. case "$cur" in
  403. -*)
  404. COMPREPLY=( $( compgen -W "--help --timeout -t" -- "$cur" ) )
  405. ;;
  406. *)
  407. COMPREPLY=( $(compgen -S "=" -W "$(__docker_compose_services)" -- "$cur") )
  408. __docker_compose_nospace
  409. ;;
  410. esac
  411. }
  412. _docker_compose_start() {
  413. case "$cur" in
  414. -*)
  415. COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
  416. ;;
  417. *)
  418. __docker_compose_complete_services --filter status=stopped
  419. ;;
  420. esac
  421. }
  422. _docker_compose_stop() {
  423. case "$prev" in
  424. --timeout|-t)
  425. return
  426. ;;
  427. esac
  428. case "$cur" in
  429. -*)
  430. COMPREPLY=( $( compgen -W "--help --timeout -t" -- "$cur" ) )
  431. ;;
  432. *)
  433. __docker_compose_complete_running_services
  434. ;;
  435. esac
  436. }
  437. _docker_compose_top() {
  438. case "$cur" in
  439. -*)
  440. COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
  441. ;;
  442. *)
  443. __docker_compose_complete_running_services
  444. ;;
  445. esac
  446. }
  447. _docker_compose_unpause() {
  448. case "$cur" in
  449. -*)
  450. COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
  451. ;;
  452. *)
  453. __docker_compose_complete_services --filter status=paused
  454. ;;
  455. esac
  456. }
  457. _docker_compose_up() {
  458. case "$prev" in
  459. =)
  460. COMPREPLY=("$cur")
  461. return
  462. ;;
  463. --exit-code-from)
  464. __docker_compose_complete_services
  465. return
  466. ;;
  467. --scale)
  468. COMPREPLY=( $(compgen -S "=" -W "$(__docker_compose_services)" -- "$cur") )
  469. __docker_compose_nospace
  470. return
  471. ;;
  472. --timeout|-t)
  473. return
  474. ;;
  475. esac
  476. case "$cur" in
  477. -*)
  478. COMPREPLY=( $( compgen -W "--abort-on-container-exit --always-recreate-deps --attach-dependencies --build -d --detach --exit-code-from --force-recreate --help --no-build --no-color --no-deps --no-log-prefix --no-recreate --no-start --renew-anon-volumes -V --remove-orphans --scale --timeout -t" -- "$cur" ) )
  479. ;;
  480. *)
  481. __docker_compose_complete_services
  482. ;;
  483. esac
  484. }
  485. _docker_compose_version() {
  486. case "$cur" in
  487. -*)
  488. COMPREPLY=( $( compgen -W "--short" -- "$cur" ) )
  489. ;;
  490. esac
  491. }
  492. _docker_compose() {
  493. local previous_extglob_setting=$(shopt -p extglob)
  494. shopt -s extglob
  495. local commands=(
  496. build
  497. config
  498. create
  499. down
  500. events
  501. exec
  502. help
  503. images
  504. kill
  505. logs
  506. pause
  507. port
  508. ps
  509. pull
  510. push
  511. restart
  512. rm
  513. run
  514. scale
  515. start
  516. stop
  517. top
  518. unpause
  519. up
  520. version
  521. )
  522. # Options for the docker daemon that have to be passed to secondary calls to
  523. # docker-compose executed by this script.
  524. local daemon_boolean_options="
  525. --skip-hostname-check
  526. --tls
  527. --tlsverify
  528. "
  529. local daemon_options_with_args="
  530. --context -c
  531. --env-file
  532. --file -f
  533. --host -H
  534. --project-directory
  535. --project-name -p
  536. --tlscacert
  537. --tlscert
  538. --tlskey
  539. "
  540. # These options require special treatment when searching the command.
  541. local top_level_options_with_args="
  542. --ansi
  543. --log-level
  544. --profile
  545. "
  546. COMPREPLY=()
  547. local cur prev words cword
  548. _get_comp_words_by_ref -n : cur prev words cword
  549. # search subcommand and invoke its handler.
  550. # special treatment of some top-level options
  551. local command='docker_compose'
  552. local top_level_options=()
  553. local counter=1
  554. while [ $counter -lt $cword ]; do
  555. case "${words[$counter]}" in
  556. $(__docker_compose_to_extglob "$daemon_boolean_options") )
  557. local opt=${words[counter]}
  558. top_level_options+=($opt)
  559. ;;
  560. $(__docker_compose_to_extglob "$daemon_options_with_args") )
  561. local opt=${words[counter]}
  562. local arg=${words[++counter]}
  563. top_level_options+=($opt $arg)
  564. ;;
  565. $(__docker_compose_to_extglob "$top_level_options_with_args") )
  566. (( counter++ ))
  567. ;;
  568. -*)
  569. ;;
  570. *)
  571. command="${words[$counter]}"
  572. break
  573. ;;
  574. esac
  575. (( counter++ ))
  576. done
  577. local completions_func=_docker_compose_${command//-/_}
  578. declare -F $completions_func >/dev/null && $completions_func
  579. eval "$previous_extglob_setting"
  580. return 0
  581. }
  582. eval "$__docker_compose_previous_extglob_setting"
  583. unset __docker_compose_previous_extglob_setting
  584. complete -F _docker_compose docker-compose docker-compose.exe

卸载docker-compose

直接移除二进制包即可
sudo rm /usr/local/bin/docker-compose