sudo:docker-compose:命令未找到。

116

我正在尝试使用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没有问题)

sudo: docker-compose: command not found

我想不同的人对于“已安装”有不同的定义。在同一台计算机上使用docker-compose,但计算机声称未安装。

$ 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

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

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

1
docker-compose 安装在哪里?您是通过软件包安装的吗(如果是这种情况,dpkg -s docker-compose 将进行验证),还是通过其他机制安装的? - larsks
同样的错误,命令未找到?你尝试过 sudo /home/user/.local/bin/docker-compose ... 吗? - BMitch
根据我的观察,docker-compose已经安装在本地路径中,因此无法访问sudo使用sudo "PATH=$PATH" docker-compose。如果/home/user/.local/bin已经包含在您的用户路径中,则可以使用sudo "PATH=$PATH:/home/user/.local/bin" docker-compose。(更新后的答案) - VanagaS
16个回答

240

在Ubuntu 16.04上的解决方法:请参考Docker Compose文档

  1. 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. sudo chmod +x /usr/local/bin/docker-compose

执行curl命令后,它会把docker-compose放到

/usr/local/bin

但是该目录不在PATH中。 要解决这个问题,请创建符号链接:

  1. sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

现在,如果您执行以下命令:

docker-compose --version

您将看到docker-compose现在在PATH中了。


9
符号的加入修正了它。 - user6569270
7
看起来需要做很多工作,我只是运行了这个命令来解决问题:
sudo apt install docker-compose
- FrankyHollywood
1
2022年3月 - 用于Linux的sudo curl命令:curl -L https://github.com/docker/compose/releases/download/v2.3.4/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose - OLIVER.KOO
FrankyHollywood的解决方案对我起作用了。 - Ciro di Marzo
仅仅尝试安装Docker Compose就让我的Docker安装出了一些问题,所以这对我来说是一个很好的解决方案。 - SamAndrew81

35

dpkg -s ... 的输出显示 docker-compose 没有从软件包安装。如果没有更多的信息,那么至少有两种可能性:

  1. docker-compose 没有被安装,你需要安装它。

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

  2. docker-compose 安装在您的 $HOME 目录(或其他位置不在 root 的 $PATH 中)。

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

    sudo docker-compose ...
    

    随着:

    sudo `which docker-compose` ...
    

    这将使用docker-compose的完整路径调用sudo命令。

    您还可以将docker-compose安装到系统范围的目录(如/usr/local/bin)中。


2
我特别感谢您包含了使用反引号单引号 'sudo which docker-compose . . . ' 的快速简易解决方案。这个方法使用反引号非常好用,但使用其他符号则会失败... - zipzit

21

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

按照以下步骤安装Docker Compose v1:

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

     1. sudo su

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

步骤二:运行命令

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

第三步:检查 Docker-Compose 版本

     docker-compose --version

1
谢谢,在经过很多搜索后,这是唯一帮助我的东西。 - Y4RD13
1
非常感谢!我找到的所有类似的例子都不起作用! - kpollock

21

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

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

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

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

如果使用python-pip安装了docker-compose

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

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

如果docker-compose安装在用户路径中,请尝试以下命令:

sudo "PATH=$PATH" docker-compose

根据您更新的帖子,我看到docker-compose安装在用户路径/home/user/.local/bin中。如果这个路径不在您的本地路径$PATH中,请尝试:
sudo "PATH=$PATH:/home/user/.local/bin" docker-compose

有多种安装方法,其中一种是使用pip,但也可以下载二进制文件。 - BMitch
我使用pip安装了compose。 - Magick
1
请注意,您可以在不使用sudo的情况下进行“pip install docker-compose” - 这只会在$HOME/.local/bin下为您的本地用户安装 - 安装后,只需在.bashrc/.zshrc/etc中更新$PATH以包括它:“export PATH=$HOME/.local/bin:$PATH”。 - zamnuts

9
我将这里留下作为一个可能的修复方法,至少对我有用,也可能有助于其他人。我相信这应该是一个仅适用于Linux的解决方案。
我决定不使用pip安装,而是选择github版本(安装指南上的第一种选择)。
在从curl/github命令中复制docker-compose目录并将其放入/usr/local/bin/docker-compose位置的替代方案是去/usr/bin/docker-compose,这是Docker本身的位置,并将强制程序以根用户身份运行。所以它可以在root和sudo中工作,但现在没有sudo就不能工作了,这是你想要以用户身份运行它的反向效果。

在将docker-compose移动到其他位置之外,还有一种方法可以帮助实现,那就是添加一个符号链接:ln -s /usr/bin/docker-compose /usr/local/bin/docker-compose - Vince Bowdren
3
@VinceBowdren 我想你的意思是反过来的:ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose - papadp

8
如果您的用户已经安装了 docker-compose,但是 root 用户没有安装,并且如果您只需要运行一次,之后不再使用,请执行以下操作:
  • Find out path to docker-compose:

      which docker-compose
    
  • Run the command specifying full path to docker-compose from the previous command, eg:

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

6

如果您正在使用更新版本的 Docker,您可能需要使用 docker compose 而不是 docker-compose

例如,我已经在 Debian 11 上安装了 Docker。

$ docker compose version
Docker Compose version v2.17.2

5

很简单,只需重新安装docker-compose即可解决问题。

sudo apt install docker-compose

3

在 Stack Overflow 上有太多未处理的编辑请求,因此我提交了一个新答案来补充之前的答案。

我的提议是:根据你是如何安装 Docker 来选择使用语法 docker compose 还是 docker-compose,这也是 ibrahim shazly 在2022年9月27日和 Gaurav Kumar Verma 在2022年9月29日提出的相同答案。

以下是解释。我按照https://docs.docker.com/engine/install/ubuntu/#install-docker-engine上的说明在 Ubuntu 22 LTS 上安装 Docker。然后,我尝试运行 docker compose 命令,例如:

$ docker-compose up -d myserver
Command 'docker-compose' not found, but can be installed with:
...

作为Gaurav Kumar Verma指出,https://docs.docker.com/compose/install/other/有一个免责声明:

请注意,Compose standalone使用-compose语法而不是当前的标准语法compose。 例如,在使用Compose standalone时,请键入docker-compose up,而不是docker compose up

因此,我运行了:
$ docker compose up -d myserver

它成功地运行了。


2
在Ubuntu上只需运行以下命令:
sudo apt install docker-compose 这在Ubuntu 22*上可行。

这可能有效,但是在Ubuntu和docker-compose都经历了多次迭代之后,重新启动此帖子可能没有什么意义。 OP已经解决了即时问题,该问题几乎肯定已经过时了。 - Rohde Fischer
非常感谢。我遇到了同样的挑战,导致了这个问题。当我找到解决方案时,我想到可能会有像我一样的人经历同样的问题并得到帮助。我非常感激您的帮助。 - jeraldlashie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接