Resolvendo o Erro 'docker-compose: comando não encontrado'

DockerBeginner
Pratique Agora

Introdução

Este laboratório oferece um guia prático para resolver o erro "docker-compose: command not found", um problema comum que os usuários do Docker encontram. O Docker Compose é uma ferramenta essencial para gerenciar aplicações Docker de múltiplos contêineres, e encontrar este erro pode impedir seu fluxo de trabalho. Ao completar este laboratório, você adquirirá as habilidades para solucionar e corrigir este problema, permitindo que você continue a desenvolver e implantar suas aplicações em contêineres de forma eficaz.

docker compose command not found

Este laboratório requer uma conexão com a internet para aprendizado, portanto, apenas usuários Pro podem iniciar a VM. Atualize sua conta para Pro.

Entendendo o Docker Compose e Verificando a Instalação

O que é Docker Compose?

Docker Compose é uma ferramenta que ajuda a definir e compartilhar aplicações de múltiplos contêineres. Com o Compose, você pode criar um arquivo YAML para configurar os serviços da sua aplicação e, em seguida, iniciar todos os serviços com um único comando. Ele simplifica o processo de gerenciamento de múltiplos contêineres que trabalham juntos.

Verificando se o Docker Compose está Instalado

Primeiramente, vamos verificar se o Docker Compose já está instalado em seu sistema. Abra um terminal e execute:

docker-compose --version

Você verá uma saída semelhante a:

docker-compose: command not found
command not found

No entanto, se você receber uma mensagem de erro como docker-compose: command not found, isso significa que o Docker Compose não está instalado ou não está configurado corretamente no PATH do seu sistema.

Verificando a Instalação do Docker

Antes de instalarmos o Docker Compose, vamos verificar se o próprio Docker está corretamente instalado. Execute:

docker --version

Você deve ver uma saída semelhante a:

Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3

Se você não vir essa saída, o Docker pode não estar corretamente instalado. No entanto, para este laboratório, focaremos em resolver o problema do Docker Compose.

Instalando o Docker Compose

Como confirmamos que o Docker Compose não está instalado ou não está acessível, vamos instalá-lo. Existem alguns métodos diferentes para instalar o Docker Compose, mas focaremos na abordagem mais direta para sistemas Ubuntu.

Método 1: Usando o gerenciador de pacotes apt

A maneira mais simples de instalar o Docker Compose é através do gerenciador de pacotes apt. Vamos fazer isso:

  1. Primeiro, configure o repositório e instale as dependências:
## Add Docker's official GPG key:
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

## Add the repository to Apt sources:
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

Você deve ver uma saída mostrando o processo de atualização.

  1. Em seguida, instale o Docker Compose:
sudo apt install -y docker-compose-plugin

Você verá uma saída mostrando o progresso da instalação.

  1. Após a conclusão da instalação, verifique se funcionou verificando a versão:
docker compose version

Observação: Em instalações Docker mais recentes, o comando é docker compose (com um espaço) em vez de docker-compose (com um hífen).

Você deve ver uma saída semelhante a:

Docker Compose version v2.33.1

Método 2: Usando curl para instalar uma versão específica

Você pode pular este método se já instalou o Docker Compose usando o método apt.

Se o método apt não funcionou ou você precisa de uma versão específica, você pode instalar o Docker Compose diretamente:

  1. Crie um diretório para os plugins da CLI do Docker, se ele não existir:
mkdir -p ~/.docker/cli-plugins/
  1. Baixe o binário do 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

Você verá uma barra de progresso enquanto o arquivo é baixado.

  1. Torne o binário executável:
chmod +x ~/.docker/cli-plugins/docker-compose
  1. Verifique a instalação:
docker compose version

Você deve ver uma saída mostrando a versão do Docker Compose.

Criando um Projeto Docker Compose Simples

Agora que instalamos o Docker Compose com sucesso, vamos criar um projeto Docker Compose simples para garantir que tudo esteja funcionando corretamente.

Criando um Diretório de Projeto

Primeiro, vamos criar um diretório para o nosso projeto Docker Compose:

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

Criando um Arquivo Docker Compose

Agora, vamos criar um arquivo Docker Compose simples que executará um servidor web Nginx básico. Crie um arquivo chamado docker-compose.yml usando o editor de texto nano:

nano docker-compose.yml

No editor, adicione o seguinte conteúdo:

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

Esta configuração define:

  • Um serviço chamado "web" usando a imagem Nginx mais recente
  • Mapeamento de porta da porta 80 do contêiner para a porta 8080 do nosso host
  • Um volume que mapeia um diretório local para a raiz web do Nginx

Pressione Ctrl+O e depois Enter para salvar o arquivo, e Ctrl+X para sair do nano.

Criando Conteúdo HTML

Vamos criar o diretório html e um arquivo index.html simples:

mkdir -p html
nano html/index.html

No editor, adicione o seguinte conteúdo 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>

Pressione Ctrl+O e depois Enter para salvar o arquivo, e Ctrl+X para sair do nano.

Executando o Projeto Docker Compose

Agora, vamos executar nosso projeto Docker Compose:

docker compose up -d

A flag -d executa os contêineres em modo detached (em segundo plano).

Você deve ver uma saída semelhante a:

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

Isso indica que o Docker Compose criou e iniciou seu contêiner com sucesso.

Verificando o Servidor Web

Vamos verificar se nosso servidor web está funcionando corretamente:

curl http://localhost:8080

Você deve ver o conteúdo HTML que criou anteriormente:

<!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>

Isso confirma que o Docker Compose está funcionando corretamente.

docker compose is working

Gerenciando Aplicações Docker Compose

Agora que configuramos e executamos com sucesso uma aplicação Docker Compose, vamos aprender a gerenciá-la com vários comandos Docker Compose.

Verificando Contêineres em Execução

Para verificar o status dos seus contêineres Docker Compose, execute:

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

Você deve ver uma saída semelhante a:

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

Isso mostra que seu contêiner do servidor web Nginx está em execução e o mapeamento de porta está ativo.

Visualizando Logs do Contêiner

Para visualizar os logs dos seus contêineres, execute:

docker compose logs

Isso exibirá os logs combinados de todos os contêineres em sua aplicação Docker Compose. Você deve ver uma saída que inclui mensagens de inicialização do Nginx.

Para visualizar os logs de um serviço específico, especifique seu nome:

docker compose logs web

Parando Sua Aplicação

Para parar sua aplicação Docker Compose sem remover os contêineres, execute:

docker compose stop

Você deve ver uma saída indicando que os contêineres estão sendo parados:

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

Para verificar se os contêineres foram parados, verifique seu status:

docker compose ps

Você deve ver que os contêineres não estão mais em execução.

Iniciando Sua Aplicação Novamente

Para iniciar seus contêineres parados novamente, execute:

docker compose start

Você deve ver uma saída indicando que os contêineres estão sendo iniciados:

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

Verifique se eles estão em execução novamente:

docker compose ps

Parando e Removendo Sua Aplicação

Quando terminar com sua aplicação Docker Compose, você pode parar e remover todos os contêineres, redes e volumes com um único comando:

docker compose down

Você deve ver uma saída semelhante a:

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

Isso indica que seus contêineres foram parados e removidos, e a rede criada para eles também foi removida.

Solucionando Problemas Comuns do Docker Compose

Esta etapa é opcional. Você pode ignorá-la se não quiser praticar a solução de problemas do Docker Compose.

Mesmo depois de resolver o erro "docker-compose: command not found", você pode encontrar outros problemas comuns com o Docker Compose. Vamos explorar esses problemas e suas soluções.

Problema 1: Conflitos com Contêineres Existentes

Às vezes, você pode encontrar erros como:

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

Isso acontece quando um contêiner com o mesmo nome já existe. Vamos ver como lidar com isso:

  1. Primeiro, verifique se existem contêineres existentes:
docker ps -a

Este comando lista todos os contêineres, incluindo os que foram parados.

  1. Se você vir um contêiner com um nome conflitante, você pode removê-lo:
docker rm -f docker-compose-test-web-1

Substitua docker-compose-test-web-1 pelo nome real do contêiner na sua saída.

Problema 2: Erros de Permissão Negada

Às vezes, você pode ver erros de permissão ao trabalhar com o Docker Compose. Isso geralmente ocorre porque os comandos Docker normalmente exigem privilégios de root. Se você vir um erro como:

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

Você pode precisar usar sudo com seus comandos Docker Compose, ou garantir que seu usuário esteja no grupo Docker. Para adicionar seu usuário ao grupo Docker:

sudo usermod -aG docker $USER

Observação: Isso requer fazer logout e login novamente para ter efeito. Para este laboratório, podemos usar sudo com nossos comandos, se necessário.

Problema 3: Conflitos de Porta

Se você vir um erro como:

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

Significa que outro serviço já está usando a porta 8080. Para resolver isso:

  1. Encontre o que está usando a porta 8080:
sudo lsof -i :8080
  1. Pare esse serviço ou modifique seu docker-compose.yml para usar uma porta diferente:
nano docker-compose.yml

Altere o mapeamento da porta de "8080:80" para algo como "8081:80", salve e saia.

  1. Inicie sua aplicação Docker Compose novamente:
docker compose up -d

Vamos Praticar a Correção de um Conflito de Porta

Vamos criar deliberadamente um conflito de porta e resolvê-lo:

  1. Crie um novo projeto Docker Compose com a mesma porta:
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
  1. Adicione o seguinte conteúdo:
version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Salve e saia.

  1. Inicie o novo serviço:
docker compose up -d
  1. Agora, volte para seu projeto original e tente iniciá-lo:
cd ~/project/docker-compose-test
docker compose up -d

Você deve ver um erro de conflito de porta.

  1. Modifique seu docker-compose.yml original para usar a porta 8081 em vez de 8080:
nano docker-compose.yml

Altere "8080:80" para "8081:80", salve e saia.

  1. Tente iniciá-lo novamente:
docker compose up -d

Agora, ambos os serviços devem estar em execução, um na porta 8080 e outro na porta 8081.

  1. Limpe parando e removendo ambos os projetos:
docker compose down
cd ~/project/another-test
docker compose down

Resumo

Parabéns por concluir este laboratório sobre como resolver o erro "docker-compose: command not found". Você conseguiu com sucesso:

  1. Verificar o status da instalação do Docker e do Docker Compose
  2. Instalar o Docker Compose usando diferentes métodos
  3. Criar e executar uma aplicação Docker Compose simples
  4. Aprender comandos essenciais do Docker Compose para gerenciar aplicações
  5. Explorar problemas comuns do Docker Compose e suas soluções

Essas habilidades serão valiosas ao trabalhar com aplicações Docker de múltiplos contêineres no futuro. As técnicas de solução de problemas que você aprendeu podem ser aplicadas a muitos outros problemas relacionados ao Docker, tornando seu fluxo de trabalho de desenvolvimento mais suave e eficiente.