Esta práctica ofrece una guía práctica para resolver el error "docker-compose: comando no encontrado", un problema común que enfrentan los usuarios de Docker. Docker Compose es una herramienta esencial para la gestión de aplicaciones Docker con múltiples contenedores, y el surgimiento de este error puede obstaculizar su flujo de trabajo. Al completar esta práctica, adquirirá las habilidades para diagnosticar y solucionar este problema, lo que le permitirá continuar desarrollando y desplegando eficazmente sus aplicaciones empaquetadas en contenedores.
Esta práctica requiere una conexión a Internet para el aprendizaje, por lo que solo los usuarios Pro pueden iniciar la máquina virtual. Actualice su cuenta a 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{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/ps -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/start -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/stop -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/rm -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/logs -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/create -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
docker/version -.-> lab-390530{{"Resolver el error 'docker-compose: comando no encontrado'"}}
end
Comprender Docker Compose y Verificar la Instalación
¿Qué es Docker Compose?
Docker Compose es una herramienta que te ayuda a definir y compartir aplicaciones con múltiples contenedores. Con Compose, puedes crear un archivo YAML para configurar los servicios de tu aplicación y luego iniciar todos los servicios con un solo comando. Simplifica el proceso de gestión de múltiples contenedores que trabajan juntos.
Verificar si Docker Compose está instalado
Comencemos verificando si Docker Compose ya está instalado en tu sistema. Abra una terminal y ejecute:
docker-compose --version
Verá una salida similar a:
docker-compose: comando no encontrado
Sin embargo, si recibe un mensaje de error como docker-compose: comando no encontrado, significa que Docker Compose no está instalado o no está configurado correctamente en la variable de entorno PATH de tu sistema.
Verificar la instalación de Docker
Antes de instalar Docker Compose, verifiquemos que Docker en sí mismo esté instalado correctamente. Ejecute:
docker --version
Debería ver una salida similar a:
Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3
Si no ve esta salida, es posible que Docker no esté instalado correctamente. Sin embargo, para esta práctica, nos centraremos en resolver el problema de Docker Compose.
Instalando Docker Compose
Como confirmamos que Docker Compose no está instalado o no es accesible, procedamos a instalarlo. Hay varios métodos diferentes para instalar Docker Compose, pero nos centraremos en el enfoque más sencillo para sistemas Ubuntu.
Método 1: Usando el administrador de paquetes apt
La forma más simple de instalar Docker Compose es a través del administrador de paquetes apt. Procedamos:
Primero, configure el repositorio e instale las dependencias:
## Agregue la clave GPG oficial de 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
## Agregue el repositorio a las fuentes de 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
Debería ver una salida que muestre el proceso de actualización.
A continuación, instale Docker Compose:
sudo apt install -y docker-compose-plugin
Verá una salida que muestra el progreso de la instalación.
Una vez completada la instalación, verifique que funcione comprobando la versión:
docker compose version
Nota: En instalaciones más recientes de Docker, el comando es docker compose (con un espacio) en lugar de docker-compose (con un guión).
Debería ver una salida similar a:
Docker Compose version v2.33.1
Método 2: Usando curl para instalar una versión específica
Puede omitir este método si ya ha instalado Docker Compose utilizando el método apt.
Si el método apt no funcionó o necesita una versión específica, puede instalar Docker Compose directamente:
Cree un directorio para los complementos de la CLI de Docker si no existe:
Verá una barra de progreso mientras se descarga el archivo.
Haga que el binario sea ejecutable:
chmod +x ~/.docker/cli-plugins/docker-compose
Verifique la instalación:
docker compose version
Debería ver una salida que muestre la versión de Docker Compose.
Creando un proyecto simple con Docker Compose
Ahora que hemos instalado con éxito Docker Compose, creemos un proyecto simple con Docker Compose para asegurarnos de que todo está funcionando correctamente.
Creando un directorio para el proyecto
Primero, creemos un directorio para nuestro proyecto de Docker Compose:
mkdir -p ~/project/docker-compose-test
cd ~/project/docker-compose-test
Creando un archivo de Docker Compose
Ahora, creemos un archivo simple de Docker Compose que ejecutará un servidor web básico de Nginx. Cree un archivo llamado docker-compose.yml usando el editor de texto nano:
Un servicio llamado "web" que utiliza la imagen más reciente de Nginx
El mapeo de puertos desde el puerto 80 del contenedor al puerto 8080 de nuestro host
Un volumen que mapea un directorio local a la raíz web de Nginx
Presione Ctrl+O y luego Enter para guardar el archivo, y Ctrl+X para salir de nano.
Creando contenido HTML
Vamos a crear el directorio html y un archivo index.html simple:
mkdir -p html
nano html/index.html
En el editor, agregue el siguiente contenido HTML:
<!DOCTYPE html>
<html>
<head>
<title>Prueba de Docker Compose</title>
</head>
<body>
<h1>Docker Compose está funcionando!</h1>
<p>
Si puedes ver esta página, has resuelto con éxito el problema de
docker-compose.
</p>
</body>
</html>
Presione Ctrl+O y luego Enter para guardar el archivo, y Ctrl+X para salir de nano.
Ejecutando el proyecto de Docker Compose
Ahora, ejecutemos nuestro proyecto de Docker Compose:
docker compose up -d
La bandera -d ejecuta los contenedores en modo detachado (en segundo plano).
Debería ver una salida similar a:
Creating network "docker-compose-test_default" with the default driver
Creating docker-compose-test_web_1... done
Esto indica que Docker Compose ha creado y iniciado con éxito su contenedor.
Verificando el servidor web
Vamos a verificar que nuestro servidor web está funcionando correctamente:
curl http://localhost:8080
Debería ver el contenido HTML que creó anteriormente:
<!DOCTYPE html>
<html>
<head>
<title>Prueba de Docker Compose</title>
</head>
<body>
<h1>Docker Compose está funcionando!</h1>
<p>
Si puedes ver esta página, has resuelto con éxito el problema de
docker-compose.
</p>
</body>
</html>
Esto confirma que Docker Compose está funcionando correctamente.
Administrando aplicaciones con Docker Compose
Ahora que hemos configurado y ejecutado con éxito una aplicación de Docker Compose, aprendamos cómo administrarla con varios comandos de Docker Compose.
Verificando contenedores en ejecución
Para verificar el estado de los contenedores de Docker Compose, ejecute:
cd ~/project/docker-compose-test
docker compose ps
Debería ver una salida similar a:
NAME COMMAND SERVICE STATUS PORTS
docker-compose-test-web-1 "/docker-entrypoint.…" web running 0.0.0.0:8080->80/tcp
Esto muestra que el contenedor del servidor web Nginx está en ejecución y el mapeo de puertos está activo.
Visualizando los registros de los contenedores
Para ver los registros de los contenedores, ejecute:
docker compose logs
Esto mostrará los registros combinados de todos los contenedores en su aplicación de Docker Compose. Debería ver una salida que incluya los mensajes de inicio de Nginx.
Para ver los registros de un servicio específico, especifique su nombre:
docker compose logs web
Deteniendo su aplicación
Para detener su aplicación de Docker Compose sin eliminar los contenedores, ejecute:
docker compose stop
Debería ver una salida que indique que los contenedores se están deteniendo:
✔ Container docker-compose-test-web-1 Stopped
Para verificar que los contenedores se han detenido, verifique su estado:
docker compose ps
Debería ver que los contenedores ya no están en ejecución.
Iniciando nuevamente su aplicación
Para iniciar nuevamente sus contenedores detenidos, ejecute:
docker compose start
Debería ver una salida que indique que los contenedores se están iniciando:
✔ Container docker-compose-test-web-1 Started
Verifique que estén en ejecución nuevamente:
docker compose ps
Deteniendo y eliminando su aplicación
Cuando haya terminado con su aplicación de Docker Compose, puede detener y eliminar todos los contenedores, redes y volúmenes con un solo comando:
Esto indica que sus contenedores se han detenido y eliminado, y la red creada para ellos también se ha eliminado.
Solución de problemas comunes de Docker Compose
Este paso es opcional. Puede saltarlo si no desea practicar la solución de problemas de Docker Compose.
Incluso después de resolver el error "docker-compose: comando no encontrado", es posible que encuentre otros problemas comunes con Docker Compose. Exploremos estos problemas y sus soluciones.
Problema 1: Conflictos con contenedores existentes
A veces puede encontrar errores 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.
Esto sucede cuando ya existe un contenedor con el mismo nombre. Veamos cómo manejarlo:
Primero, verifique si hay algún contenedor existente:
docker ps -a
Este comando lista todos los contenedores, incluyendo los detenidos.
Si ve un contenedor con un nombre en conflicto, puede eliminarlo:
docker rm -f docker-compose-test-web-1
Reemplace docker-compose-test-web-1 con el nombre real del contenedor de su salida.
Problema 2: Errores de permiso denegado
A veces puede ver errores de permiso cuando trabaja con Docker Compose. Estos a menudo ocurren porque los comandos de Docker generalmente requieren privilegios de superusuario. Si ve un error como:
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
Es posible que tenga que usar sudo con sus comandos de Docker Compose, o asegúrese de que su usuario esté en el grupo Docker. Para agregar su usuario al grupo Docker:
sudo usermod -aG docker $USER
Nota: Esto requiere cerrar sesión y volver a iniciar sesión para que surta efecto. Para esta práctica, podemos usar sudo con nuestros comandos si es necesario.
Problema 3: Conflictos de puertos
Si ve un error 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 otro servicio ya está usando el puerto 8080. Para resolver esto:
Encuentre lo que está usando el puerto 8080:
sudo lsof -i :8080
O detenga ese servicio o modifique su docker-compose.yml para usar un puerto diferente:
nano docker-compose.yml
Cambie el mapeo de puertos de "8080:80" a algo como "8081:80", luego guarde y salga.
Inicie nuevamente su aplicación de Docker Compose:
docker compose up -d
Vamos a practicar la solución de un conflicto de puertos
Vamos a crear deliberadamente un conflicto de puertos y resolverlo:
Cree un nuevo proyecto de Docker Compose con el mismo puerto:
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
Ahora, vuelva a su proyecto original e intente iniciarlo:
cd ~/project/docker-compose-test
docker compose up -d
Debería ver un error de conflicto de puertos.
Modifique su docker-compose.yml original para usar el puerto 8081 en su lugar:
nano docker-compose.yml
Cambie "8080:80" a "8081:80", guarde y salga.
Intente iniciarlo nuevamente:
docker compose up -d
Ahora ambos servicios deberían estar en ejecución, uno en el puerto 8080 y otro en el puerto 8081.
Limpie los recursos deteniendo y eliminando ambos proyectos:
docker compose down
cd ~/project/another-test
docker compose down
Resumen
Felicitaciones por haber completado esta práctica sobre la resolución del error "docker-compose: comando no encontrado". Has logrado con éxito:
Verificado el estado de la instalación de Docker y Docker Compose
Instalado Docker Compose utilizando diferentes métodos
Creado y ejecutado una aplicación simple con Docker Compose
Aprendido los comandos esenciales de Docker Compose para administrar aplicaciones
Explorado los problemas comunes de Docker Compose y sus soluciones
Estas habilidades resultarán valiosas a medida que trabajes con aplicaciones de Docker multi-contenedor en el futuro. Las técnicas de solución de problemas que has aprendido se pueden aplicar a muchos otros problemas relacionados con Docker, lo que hará que tu flujo de trabajo de desarrollo sea más fluido y eficiente.