Решение ошибки 'docker-compose: команда не найдена'

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот практикум дает практическое руководство по устранению ошибки "docker-compose: команда не найдена", которая часто возникает у пользователей Docker. Docker Compose - это важный инструмент для управления многоконтейнерами Docker-приложениями, и возникновение этой ошибки может помешать работе. Завершив этот практикум, вы приобретете навыки по устранению неполадок и исправлению этой проблемы, что позволит вам эффективно продолжать разработку и развертывание ваших контейнеризованных приложений.

docker compose command not found

Для обучения в этом практикуме требуется подключение к интернету, поэтому только пользователи Pro могут запустить виртуальную машину. Перейдите к тарифу Pro.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/run -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/ps -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/start -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/stop -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/rm -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/logs -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/create -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} docker/version -.-> lab-390530{{"Решение ошибки 'docker-compose: команда не найдена'"}} end

Понимание Docker Compose и проверка установки

Что такое Docker Compose?

Docker Compose - это инструмент, который помогает определить и разделить многоконтейнерные приложения. С помощью Compose вы можете создать файл YAML для настройки служб вашего приложения, а затем запустить все службы с помощью одной команды. Это упрощает процесс управления несколькими контейнерами, работающими вместе.

Проверка наличия установки Docker Compose

Прежде всего, давайте проверим, установлен ли Docker Compose в вашей системе. Откройте терминал и выполните:

docker-compose --version

Вы увидите вывод, похожий на:

docker-compose: команда не найдена
command not found

Однако, если вы получаете сообщение об ошибке, подобное docker-compose: команда не найдена, это означает, что Docker Compose не установлен или не правильно настроен в PATH вашей системы.

Проверка установки Docker

Прежде чем устанавливать Docker Compose, давайте убедимся, что Docker сам по себе правильно установлен. Запустите:

docker --version

Вы должны увидеть вывод, похожий на:

Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3

Если вы не видите этот вывод, возможно, Docker не установлен правильно. Однако для этого практикума мы сосредоточимся на решении проблемы с Docker Compose.

Установка Docker Compose

Поскольку мы подтвердили, что Docker Compose не установлен или недоступен, давайте его установим. Существует несколько различных методов установки Docker Compose, но мы сосредоточимся на самом простом подходе для систем Ubuntu.

Метод 1: Использование менеджера пакетов apt

Самый простой способ установить Docker Compose - это через менеджер пакетов apt. Давайте это сделаем:

  1. Во - первых, настройте репозиторий и установите зависимости:
## Добавьте официальный GPG - ключ Docker:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

## Добавьте репозиторий в источники Apt:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Вы должны увидеть вывод, показывающий процесс обновления.

  1. Далее, установите Docker Compose:
sudo apt install -y docker-compose-plugin

Вы увидите вывод, показывающий процесс установки.

  1. После завершения установки проверьте, что все работает, проверив версию:
docker compose version

Примечание: В более новых установках Docker команда - это docker compose (с пробелом), а не docker-compose (с дефисом).

Вы должны увидеть вывод, похожий на:

Docker Compose version v2.33.1

Метод 2: Использование curl для установки конкретной версии

Если вы уже установили Docker Compose с помощью метода apt, вы можете пропустить этот метод.

Если метод apt не сработал или вам нужна конкретная версия, вы можете установить Docker Compose напрямую:

  1. Создайте директорию для плагинов CLI Docker, если она не существует:
mkdir -p ~/.docker/cli-plugins/
  1. Загрузите двоичный файл Docker Compose:
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

Вы увидите индикацию прогресса при скачивании файла.

  1. Сделайте двоичный файл исполняемым:
chmod +x ~/.docker/cli-plugins/docker-compose
  1. Проверьте установку:
docker compose version

Вы должны увидеть вывод, показывающий версию Docker Compose.

Создание простого проекта с Docker Compose

Теперь, когда мы успешно установили Docker Compose, давайте создадим простой проект с Docker Compose, чтобы убедиться, что все работает правильно.

Создание директории проекта

Во - первых, создадим директорию для нашего проекта с Docker Compose:

mkdir -p ~/project/docker-compose-test
cd ~/project/docker-compose-test

Создание файла Docker Compose

Теперь создадим простой файл Docker Compose, который запустит базовый веб - сервер Nginx. Создайте файл под названием docker-compose.yml с использованием текстового редактора nano:

nano docker-compose.yml

В редакторе добавьте следующее содержимое:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes: -./html:/usr/share/nginx/html

Это конфигурация определяет:

  • Сервис с именем "web", использующий последнюю версию образа Nginx
  • Перенаправление порта из контейнера с портом 80 на порт 8080 на нашем хосте
  • Монтирование локальной директории в корневую директорию веб - сервера Nginx

Нажмите Ctrl+O, затем Enter, чтобы сохранить файл, и Ctrl+X, чтобы выйти из nano.

Создание HTML - содержимого

Создадим директорию html и простой файл index.html:

mkdir -p html
nano html/index.html

В редакторе добавьте следующее HTML - содержимое:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Docker Compose is working!</h1>
    <p>
      If you can see this page, you have successfully resolved the
      docker-compose issue.
    </p>
  </body>
</html>

Нажмите Ctrl+O, затем Enter, чтобы сохранить файл, и Ctrl+X, чтобы выйти из nano.

Запуск проекта с Docker Compose

Теперь запустим наш проект с Docker Compose:

docker compose up -d

Флаг -d запускает контейнеры в отсоединенном режиме (в фоновом режиме).

Вы должны увидеть вывод, похожий на:

Creating network "docker-compose-test_default" with the default driver
Creating docker-compose-test_web_1... done

Это означает, что Docker Compose успешно создал и запустил ваш контейнер.

Проверка веб - сервера

Проверим, что наша веб - служба запущена правильно:

curl http://localhost:8080

Вы должны увидеть HTML - содержимое, которое вы создали ранее:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Docker Compose is working!</h1>
    <p>
      If you can see this page, you have successfully resolved the
      docker-compose issue.
    </p>
  </body>
</html>

Это подтверждает, что Docker Compose работает правильно.

docker compose is working

Управление приложениями с Docker Compose

Теперь, когда мы успешно настроили и запустили приложение с Docker Compose, давайте научимся управлять им с помощью различных команд Docker Compose.

Проверка запущенных контейнеров

Для проверки статуса контейнеров Docker Compose выполните:

cd ~/project/docker-compose-test
docker compose ps

Вы должны увидеть вывод, похожий на:

NAME                        COMMAND                  SERVICE             STATUS              PORTS
docker-compose-test-web-1   "/docker-entrypoint.…"   web                 running             0.0.0.0:8080->80/tcp

Это показывает, что контейнер веб - сервера Nginx запущен и перенаправление портов активно.

Просмотр журналов контейнера

Для просмотра журналов из контейнеров выполните:

docker compose logs

Это покажет объединенные логи из всех контейнеров в вашем приложении с Docker Compose. Вы должны увидеть вывод, включающий сообщения о запуске Nginx.

Для просмотра журналов для определенной службы укажите ее имя:

docker compose logs web

Остановка приложения

Для остановки приложения с Docker Compose без удаления контейнеров выполните:

docker compose stop

Вы должны увидеть вывод, указывающий на то, что контейнеры останавливаются:

✔ Container docker-compose-test-web-1  Stopped

Для проверки того, что контейнеры остановлены, проверьте их статус:

docker compose ps

Вы должны увидеть, что контейнеры больше не запущены.

Запуск приложения снова

Для запуска остановленных контейнеров снова выполните:

docker compose start

Вы должны увидеть вывод, указывающий на то, что контейнеры запускаются:

✔ Container docker-compose-test-web-1  Started

Проверьте, что они снова запущены:

docker compose ps

Остановка и удаление приложения

Когда вы закончите работу с приложением Docker Compose, вы можете остановить и удалить все контейнеры, сети и тома с помощью одной команды:

docker compose down

Вы должны увидеть вывод, похожий на:

✔ Container docker-compose-test-web-1  Removed
✔ Network docker-compose-test_default  Removed

Это означает, что контейнеры были остановлены и удалены, а сеть, созданная для них, также была удалена.

Решение общих проблем с Docker Compose

Этот шаг является необязательным. Вы можете пропустить его, если не хотите практиковаться в решении проблем с Docker Compose.

Даже после решения ошибки "docker-compose: команда не найдена" вы можете столкнуться с другими общими проблемами при работе с Docker Compose. Давайте исследуем эти проблемы и их решения.

Проблема 1: конфликты с существующими контейнерами

Иногда вы можете встретить ошибки такого вида:

ERROR: for web  Cannot create container for service web: Conflict. The container name "/docker-compose-test-web-1" is already in use by container.

Это происходит, когда контейнер с таким же именем уже существует. Давайте посмотрим, как обработать это:

  1. Во - первых, проверьте наличие любых существующих контейнеров:
docker ps -a

Эта команда выводит список всех контейнеров, включая остановленные.

  1. Если вы видите контейнер с конфликтующим именем, вы можете удалить его:
docker rm -f docker-compose-test-web-1

Замените docker-compose-test-web-1 на фактическое имя контейнера из вывода.

Проблема 2: ошибки "Permission Denied"

Иногда при работе с Docker Compose вы можете встретить ошибки доступа. Это часто происходит потому, что команды Docker обычно требуют привилегий root. Если вы видите ошибку такого вида:

ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

Возможно, вам нужно использовать sudo с командами Docker Compose или убедиться, что ваш пользователь находится в группе Docker. Чтобы добавить вашего пользователя в группу Docker:

sudo usermod -aG docker $USER

Примечание: для этого требуется выход и вход в систему, чтобы изменения вступили в силу. Для этого практикума мы можем использовать sudo с командами, если необходимо.

Проблема 3: конфликты портов

Если вы видите ошибку такого вида:

ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint: Bind for 0.0.0.0:8080 failed: port is already allocated

Это означает, что другой сервис уже использует порт 8080. Чтобы решить это:

  1. Найдите, что использует порт 8080:
sudo lsof -i :8080
  1. Или остановите этот сервис, или измените ваш docker-compose.yml, чтобы использовать другой порт:
nano docker-compose.yml

Измените перенаправление порта из "8080:80" на что - то вроде "8081:80", затем сохраните и выйдите.

  1. Запустите снова ваше приложение с Docker Compose:
docker compose up -d

Давайте практикуемся в решении конфликта портов

Давайте сознательно создадим конфликт портов и исправим его:

  1. Создайте новый проект с Docker Compose с тем же портом:
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
  1. Добавьте следующее содержимое:
version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Сохраните и выйдите.

  1. Запустите новый сервис:
docker compose up -d
  1. Теперь перейдите в ваш исходный проект и попытайтесь его запустить:
cd ~/project/docker-compose-test
docker compose up -d

Вы должны увидеть ошибку конфликта портов.

  1. Измените исходный docker-compose.yml, чтобы использовать порт 8081 вместо него:
nano docker-compose.yml

Измените "8080:80" на "8081:80", сохраните и выйдите.

  1. Попытайтесь запустить его снова:
docker compose up -d

Теперь оба сервиса должны быть запущены, один на порту 8080, а другой на порту 8081.

  1. Очистите систему, остановив и удалив оба проекта:
docker compose down
cd ~/project/another-test
docker compose down

Резюме

Поздравляем с успешным завершением этого практикума по решению ошибки "docker-compose: команда не найдена". Вы успешно:

  1. Проверили статус установки Docker и Docker Compose
  2. Установили Docker Compose с использованием различных методов
  3. Создали и запустили простое приложение с Docker Compose
  4. Освоили важные команды Docker Compose для управления приложениями
  5. Исследовали общие проблемы с Docker Compose и их решения

Эти навыки будут полезны при работе с многоконтейнерами Docker-приложениями в будущем. Техники отладки, которые вы освоили, можно применить к многим другим Docker-связанным проблемам, делая ваш рабочий процесс более гладким и эффективным.