Sudo: docker-compose: команда не найдена

Я пытаюсь запустить docker-compose с помощью sudo.

У меня есть докеры и докеры, установленные на Ubuntu 16.01.

Из-за ошибки при попытке загрузить композицию с помощью curl я закончил установку с помощью pip.

Докерная версия 1.12.0, build 8eab29e docker-compose version 1.8.0, build 94f7016

Тем не менее, когда я пытаюсь запустить docker-compose с sudo, я получаю следующее (использование sudo with 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/anton/.local/lib/python2.7/site-packages

Ответ 1

На 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

Ответ 2

Вывод dpkg -s ... демонстрирует, что docker-compose не установлен из пакета. Без дополнительной информации у вас есть как минимум две возможности:

  • docker-compose просто не установлен вообще, и вам нужно его установить.

    Решение здесь простое: install docker-compose.

  • docker-compose устанавливается в вашем каталоге $HOME (или в другом месте не в корневом каталоге $PATH).

    В этом случае существует несколько решений. Самый легкий, вероятно, заменит:

    sudo docker-compose ...
    

    С

    sudo `which docker-compose` ...
    

    Это вызовет sudo с полным путем до docker-compose.

    Вы также можете установить docker-compose в общесистемный каталог, например /usr/local/bin.

Ответ 3

Если вы попытались установить через официальную страницу компоновки docker, где вам нужно загрузить двоичный файл с помощью curl:

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

Тогда не забудьте добавить исполняемый флаг в двоичный файл:

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

Если docker-compose устанавливается с использованием python-pip

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

Ответ 4

Я оставлю это здесь как возможное исправление, по крайней мере, работало для меня и могло бы помочь другим. Уверен, это будет исправлено только в Linux.

Я решил не идти с установкой pip и перейти на версию github (первый вариант в руководстве по установке).

Вместо того, чтобы помещать скопированный каталог docker-compose в /usr/local/bin/docker-compose из команды curl/github, я выбрал /usr/bin/docker-compose, который является местоположением самого Docker и заставит программу работать в корне. Так что он работает в root и sudo, но теперь не будет работать без sudo, так что противоположный эффект - это то, что вы в любом случае хотите запустить как пользователь.

Ответ 5

У меня та же проблема, я решил проблему:

Шаг 1: загрузите docker-compose, используя следующую команду.

     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: Запустить команду

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

Шаг 3: Проверьте версию docker-compose

     docker-compose --version

Ответ 6

Или просто добавьте свой двоичный путь в PATH. В конце bashrc:

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

сохраните файл и запустите:

source .bashrc

и команда будет работать.