关于linux:sudo:docker-compose:找不到命令

sudo: docker-compose: command not found

我正在尝试使用sudo运行docker-compose。

我在Ubuntu 16.01上同时安装了docker和docker-compose。

由于尝试使用curl下载compose时出错,我最终使用pip安装了它。

Docker版本1.12.0,内部版本8eab29e
docker-compose版本1.8.0,内部版本94f7016

但是,当我尝试使用sudo运行docker-compose时,我得到了以下信息(将sudo与docker一起使用就可以了)

1
sudo: docker-compose: command not found

我想对"已安装"的含义有不同的定义。我一直在声称未安装docker的同一台计算机上使用docker-compose。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
$ dpkg -s docker-compose
dpkg-query: package 'docker-compose' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.


$ whereis docker-compose
docker-compose: /home/user/.local/bin/docker-compose

$ pip show --files docker-compose
---
Metadata-Version: 2.0
Name: docker-compose
Version: 1.8.0
Summary: Multi-container orchestration for Docker
Home-page: https://www.docker.com/
Author: Docker, Inc.
Author-email: UNKNOWN
Installer: pip
License: Apache License 2.0
Location: /home/anton/.local/lib/python2.7/site-packages
Requires: six, jsonschema, enum34, cached-property, websocket-client, docker-py, requests, docopt, dockerpty, PyYAML, texttable
Classifiers:
  Development Status :: 5 - Production/Stable
  Environment :: Console
  Intended Audience :: Developers
  License :: OSI Approved :: Apache Software License
  Programming Language :: Python :: 2
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3
  Programming Language :: Python :: 3.4
Files:
  ../../../bin/docker-compose
  compose/GITSHA
  compose/__init__.py
  compose/__init__.pyc
  compose/__main__.py
  compose/__main__.pyc
  compose/bundle.py
  compose/bundle.pyc
  compose/cli/__init__.py
  compose/cli/__init__.pyc
  compose/cli/colors.py
  compose/cli/colors.pyc
  compose/cli/command.py
  compose/cli/command.pyc
  compose/cli/docker_client.py
  compose/cli/docker_client.pyc
  compose/cli/docopt_command.py
  compose/cli/docopt_command.pyc
  compose/cli/errors.py
  compose/cli/errors.pyc
  compose/cli/formatter.py
  compose/cli/formatter.pyc
  compose/cli/log_printer.py
  compose/cli/log_printer.pyc
  compose/cli/main.py
  compose/cli/main.pyc
  compose/cli/signals.py
  compose/cli/signals.pyc
  compose/cli/utils.py
  compose/cli/utils.pyc
  compose/cli/verbose_proxy.py
  compose/cli/verbose_proxy.pyc
  compose/config/__init__.py
  compose/config/__init__.pyc
  compose/config/config.py
  compose/config/config.pyc
  compose/config/config_schema_v1.json
  compose/config/config_schema_v2.0.json
  compose/config/environment.py
  compose/config/environment.pyc
  compose/config/errors.py
  compose/config/errors.pyc
  compose/config/interpolation.py
  compose/config/interpolation.pyc
  compose/config/serialize.py
  compose/config/serialize.pyc
  compose/config/sort_services.py
  compose/config/sort_services.pyc
  compose/config/types.py
  compose/config/types.pyc
  compose/config/validation.py
  compose/config/validation.pyc
  compose/const.py
  compose/const.pyc
  compose/container.py
  compose/container.pyc
  compose/errors.py
  compose/errors.pyc
  compose/network.py
  compose/network.pyc
  compose/parallel.py
  compose/parallel.pyc
  compose/progress_stream.py
  compose/progress_stream.pyc
  compose/project.py
  compose/project.pyc
  compose/service.py
  compose/service.pyc
  compose/state.py
  compose/state.pyc
  compose/utils.py
  compose/utils.pyc
  compose/volume.py
  compose/volume.pyc
  docker_compose-1.8.0.dist-info/DESCRIPTION.rst
  docker_compose-1.8.0.dist-info/INSTALLER
  docker_compose-1.8.0.dist-info/METADATA
  docker_compose-1.8.0.dist-info/RECORD
  docker_compose-1.8.0.dist-info/WHEEL
  docker_compose-1.8.0.dist-info/entry_points.txt
  docker_compose-1.8.0.dist-info/metadata.json
  docker_compose-1.8.0.dist-info/pbr.json
  docker_compose-1.8.0.dist-info/top_level.txt
Entry-points:
  [console_scripts]
  docker-compose=compose.cli.main:main

我尝试了以下方法-但仍然收到相同的错误:

1
2
$ chmod +x /home/username/.local/bin/docker-compose
$ chmod +x /home/username/.local/lib/python2.7/site-packages


在Ubuntu 16.04上

这是我解决此问题的方法:请参阅Docker Compose文档

  • sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

  • sudo chmod +x /usr/local/bin/docker-compose

  • 执行curl命令后,它将docker-compose放入

    /usr/local/bin

    不在PATH上。
    要修复它,请创建一个符号链接:

  • sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  • 现在,如果您这样做:
    docker-compose --version

    您将看到docker-compose现在位于PATH


    dpkg -s ...的输出表明未从软件包中安装docker-compose。没有您的更多信息,至少有两种可能性:

  • docker-compose根本没有安装,您需要安装它。

    这里的解决方案很简单:安装docker-compose

  • docker-compose已安装在您的$HOME目录中(或其他位置不在root用户的$PATH上)。

    在这种情况下,有几种解决方案。最简单的方法可能是替换:

    1
    sudo docker-compose ...

    使用:

    1
    sudo `which docker-compose` ...

    这将调用sudo并具有docker-compose的完整路径。

    您也可以将docker-compose安装到系统范围的目录中,例如/usr/local/bin


  • 如果您尝试通过docker-compose官方页面进行安装,则需要使用curl下载二进制文件:

    1
    curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

    然后不要忘记将可执行文件标志添加到二进制文件中:

    1
    chmod +x /usr/local/bin/docker-compose

    如果使用python-pip

    安装了docker-compose

    1
    2
    sudo apt-get -y install python-pip
    sudo pip install docker-compose

    尝试使用pip show --files docker-compose来查看其安装位置。

    如果在用户路径中安装了docker-compose,请尝试:

    1
    sudo"PATH=$PATH" docker-compose

    从更新后的帖子中可以看到,docker-compose已安装在用户路径/home/user/.local/bin中,如果该路径不在您的本地路径$PATH中,请尝试:

    1
    sudo"PATH=$PATH:/home/user/.local/bin" docker-compose


    我将把它留在这里作为可能的解决方法,至少对我有用,并且可能会帮助其他人。相当确定这将是仅Linux修复程序。

    我决定不使用pip安装,而不要使用github版本(安装指南中的选项一)。

    我没有使用curl / github命令将复制的docker-compose目录放置到/usr/local/bin/docker-compose中,而是使用了/usr/bin/docker-compose,它是Docker本身的位置,将强制程序在root用户中运行。因此它可以在root和sudo中工作,但是现在如果没有sudo就无法工作,因此相反的效果是无论如何您都希望以用户身份运行它。


    如果为您的用户安装了docker-compose,但没有为root用户安装,并且您只需要运行一次并忘记它,则后言执行下一步操作:

    • 找出docker-compose的路径:

      1
        which docker-compose
    • 运行命令以指定上一条命令到docker-compose的完整路径,例如:

      1
        sudo /home/your-user/your-path-to-compose/docker-compose up

    我遇到了同样的问题,我解决了问题:

    步骤1:使用以下命令下载docker-compose。

    1
    2
    3
         1.  sudo su

         2. sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

    第2步:运行命令

    1
        chmod +x /usr/local/bin/docker-compose

    第3步:检查docker-compose版本

    1
         docker-compose --version

    或者,只需将您的二进制路径添加到PATH中。在bashrc的末尾:

    1
    2
    ...
    export PATH=$PATH:/home/user/.local/bin/

    保存文件并运行:

    1
    source .bashrc

    ,该命令将起作用。