Docker-Controller-Bot

May 6, 2026 · View on GitHub

Docker Pulls Docker Stars Docker Image Size Github stars Github forks Github last-commit Github last-commit alt text

ReadMe en Español | ReadMe in English | Canal de Noticias en Telegram

Lleva el control de tus contenedores docker desde un único lugar.

  • ✅ Listar contenedores
  • ✅ Arrancar, parar y eliminar contenedores
  • ✅ Soporte para proyectos Docker Compose con navegación jerárquica (proyecto → contenedores)
  • ✅ Obtener los logs tanto de manera directa como a través de fichero
  • ✅ Extraer el docker-compose de tus contenedores
  • ✅ Notificaciones cuando un contenedor se cae o se inicia
  • ✅ Notificaciones cuando un contenedor tiene una actualización pendiente
  • ✅ Actualizaciones de los contenedores
  • ✅ Cambiar el tag (rollback o actualización)
  • ✅ Limpia el sistema, eliminando contenedores, imágenes y otros objetos no utilizados
  • ✅ Ejecuta comandos dentro de contenedores
  • ✅ Visualiza puertos usados por contenedores, comprueba si un puerto concreto está libre y genera puertos aleatorios disponibles
  • ✅ Muestra información detallada de un contenedor o de un proyecto Compose completo
  • ✅ Programación de tareas con expresiones cron: run, stop, restart, exec, prune y mute
  • ✅ Silencia las notificaciones de forma temporal
  • ✅ Imagen multiarquitectura (amd64, arm64, armv7…) compatible con Raspberry Pi, NAS y servidores estándar
  • ✅ Soporte de idiomas (Spanish, English, Dutch, German, Russian, Galician, Italian, Catalan)

¿Lo buscas en ?

NUEVO Canal de novedades en

Crear tu bot de Telegram

Antes de levantar el contenedor necesitas un bot propio en Telegram y conocer tu identificador de usuario.

  1. Abre @BotFather en Telegram y envía /newbot. Sigue las instrucciones (un nombre y un username acabado en bot).
  2. BotFather te devolverá el token del bot. Guárdalo: irá en la variable TELEGRAM_TOKEN.
  3. Para conocer tu propio chat ID (lo necesitas para TELEGRAM_ADMIN), habla con @MissRose_bot y envíale /id. Te responderá con un número, ese es tu ID.
  4. (Opcional) Si vas a usar el bot dentro de un grupo, añádelo, hazlo administrador y obtén el chat ID del grupo de la misma forma; ese valor irá en TELEGRAM_GROUP.
  5. (Opcional) Si quieres ponerle el icono oficial al bot, descarga la imagen en alta resolución aquí y envíasela a @BotFather usando la opción /setuserpic.

Comandos disponibles

Casi todos los comandos pueden ejecutarse en dos modos: escribiendo el comando solo (/run) para que el bot muestre un menú interactivo con botones, o pasando directamente el nombre del contenedor (/run nginx) para actuar sin menús.

ComandoDescripción
/startMenú principal con la lista de comandos
/listListado completo de contenedores
/run /stop /restartArranca / detiene / reinicia un contenedor o un proyecto Compose entero
/deleteElimina un contenedor o un proyecto Compose entero
/execEjecuta un comando dentro de un contenedor
/logs /logfileLogs en mensaje o como fichero
/checkupdateComprueba si un contenedor tiene actualización
/updateallActualiza todos los contenedores
/changetagCambia el tag de la imagen (rollback o salto de versión)
/composeExtrae el docker-compose de un contenedor o proyecto
/infoMuestra información detallada de un contenedor o de un proyecto
/portsLista puertos usados, comprueba uno concreto o genera uno libre
/pruneLimpia contenedores, imágenes, redes o volúmenes no usados
/mute <minutos>Silencia las notificaciones durante X minutos
/scheduleMenú para crear, editar y borrar tareas programadas
/version /donate /donorsVersión actual / donar / lista de donantes

Soporte para Docker Compose

Si tus contenedores fueron creados con docker compose, el bot los reconoce automáticamente como un proyecto y los presenta agrupados.

En comandos como /run, /stop, /restart, /delete, /info o /compose verás primero la lista de proyectos y, al pulsar uno, sus contenedores. Las acciones de inicio, parada, reinicio y borrado se pueden aplicar al proyecto entero o a un contenedor individual.

Programaciones (/schedule)

Desde /schedule puedes crear tareas que se ejecuten en cron.

  • Acciones soportadas: run, stop, restart, exec, prune y mute.
  • Acepta expresiones cron estándar (0 */4 * * *) y atajos: @yearly, @monthly, @weekly, @daily, @hourly y @reboot.
  • Las programaciones se persisten en /app/schedule (recuerda mapear ese volumen).

Configuración en las variables del Docker Compose

CLAVEOBLIGATORIOVALOR
TELEGRAM_TOKENToken del bot
TELEGRAM_ADMINChatId del administrador (se puede obtener hablándole al bot Rose escribiendo /id). Admite múltiples administradores separados por comas. Por ejemplo 12345,54431,55944
TELEGRAM_GROUPChatId del grupo. Si este bot va a formar parte de un grupo, es necesario especificar el chatId de dicho grupo. Es necesario que el bot sea administrador del grupo
TELEGRAM_THREADThread del tema dentro de un supergrupo; valor numérico (2,3,4..). Por defecto 1. Se utiliza en conjunción con la variable TELEGRAM_GROUP
TELEGRAM_NOTIFICATION_CHANNELCanal donde se publicarán exclusivamente los cambios de estado de los contenedores
CONTAINER_NAMENombre del contenedor, lo que se le ponga en container_name en el docker-compose ha de ir aquí también
TZTimezone (Por ejemplo Europe/Madrid)
CHECK_UPDATESSi se desea que compruebe actualizaciones. 0 no - 1 sí. Por defecto 1
CHECK_UPDATE_EVERY_HOURSTiempo de espera en horas entre chequeo de actualizaciones. Por defecto 4
CHECK_UPDATE_STOPPED_CONTAINERSSi se desea que compruebe las actualizaciones de los contenedores detenidos. 0 no - 1 sí. Por defecto 1
BUTTON_COLUMNSNumero de columnas de botones en las listas de contenedores. Por defecto 2
LANGUAGEIdioma, puede ser ES / EN / NL / DE / RU / GL / IT / CAT. Por defecto ES (Spanish)
EXTENDED_MESSAGESSi se desea que muestre más mensajes de información. 0 no - 1 sí. Por defecto 0

Anotaciones

Warning

Será necesario mapear un volumen para almacenar lo que el bot escribe en /app/schedule

Note

Si se requiere tener la sesión iniciada en algún registro como DockerHub, GitHub Registry o alguno privado (docker login) es posible trasladar ese login al contenedor mapeando el ~/.docker/config.json a /root/.docker/config.json

Ejemplo de Docker-Compose para su ejecución normal

services:
    docker-controller-bot:
        environment:
            - TELEGRAM_TOKEN=
            - TELEGRAM_ADMIN=
            - CONTAINER_NAME=docker-controller-bot
            - TZ=Europe/Madrid
            #- TELEGRAM_GROUP=
            #- TELEGRAM_THREAD=1
            #- TELEGRAM_NOTIFICATION_CHANNEL=
            #- CHECK_UPDATES=1
            #- CHECK_UPDATE_EVERY_HOURS=4
            #- CHECK_UPDATE_STOPPED_CONTAINERS=1
            #- BUTTON_COLUMNS=2
            #- LANGUAGE=ES
            #- EXTENDED_MESSAGES=0
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock # NO CAMBIAR
            - /ruta/para/guardar/las/programaciones:/app/schedule # CAMBIAR LA PARTE IZQUIERDA
            #- ~/.docker/config.json:/root/.docker/config.json # Solo si se requiere iniciar sesión en algún registro
        image: dgongut/docker-controller-bot:latest
        container_name: docker-controller-bot
        restart: always
        network_mode: host
        tty: true

Funciones Extra mediante Labels/Etiquetas en otros contenedores

  • Añadiendo la etiqueta DCB-Ignore-Check-Updates a un contenedor, no se comprobarán actualizaciones para él.
  • Añadiendo la etiqueta DCB-Auto-Update a un contenedor, se actualizará automáticamente sin preguntar.

Agradecimientos

❓ Preguntas Frecuentes (FAQ)

🧭 ¿Puede el programa decirme de qué versión a qué versión se actualizó una imagen?

Respuesta corta: No, eso no es posible de forma automática.

Respuesta explicada:

El programa no se basa en "versiones", sino en comprobar si una imagen Docker ha cambiado.
Esto se hace comparando el hash (identificador único) de la imagen local con el hash remoto.

  • En Docker, el tag (como latest, v1.2, etc.) es solo una etiqueta.
  • Esa etiqueta no siempre representa una versión real del software dentro de la imagen.
  • Algunos desarrolladores usan etiquetas que coinciden con la versión (como v1.2.3), pero no es obligatorio ni automático.
  • Por ejemplo, el tag latest puede apuntar a una imagen completamente distinta en cualquier momento.

🔍 Por eso, aunque sepamos que una imagen cambió, no podemos decir automáticamente "pasaste de la versión X a la Y".

¿Por qué no se muestra el changelog o la lista de cambios?

Mostrar un changelog requeriría:

  • Saber de qué versión venías y a cuál fuiste (lo cual no es posible automáticamente).
  • Que el desarrollador del contenedor publique esa información en un lugar conocido (como GitHub o Docker Hub).
  • Que haya una forma estándar de obtenerlo, cosa que no siempre ocurre.

📦 Cada contenedor es diferente, y no todos publican cambios de forma clara o accesible.

Entonces, ¿cómo puedo saber qué cambió?

Puedes hacerlo manualmente:

  1. El programa puede mostrarte el hash anterior y el nuevo hash de la imagen.
  2. Con esos datos, puedes ir al repositorio del contenedor (GitHub, Docker Hub, etc.).
  3. Busca allí el historial de versiones, el changelog o las notas de lanzamiento si están disponibles.
🛠️ He visto que se pueden añadir labels para controlar ciertas cosas de los contenedores, ¿cómo lo hago?

Efectivamente, actualmente hay dos etiquetas (labels) que puedes añadir a los contenedores para controlarlos:

  • DCB-Ignore-Check-Updates
  • DCB-Auto-Update

Para añadirlas a un contenedor, basta con editar el archivo docker-compose.yml y agregarlas bajo la clave labels.
A continuación se muestra un ejemplo con Home Assistant:

services:
  homeassistant:
    image: lscr.io/linuxserver/homeassistant:latest
    container_name: homeassistant
    network_mode: host
    environment:
      - PUID=1026
      - PGID=100
      - TZ=Etc/Madrid
    volumes:
      - /volume2/docker/homeassistant/config:/config
      - /volume2/temp/ha:/tmp
    labels:
      - "DCB-Auto-Update"
    restart: unless-stopped
🧩 He creado mis contenedores con docker-compose y aparecen agrupados, ¿puedo gestionar uno solo?

Sí. Cuando entras en un proyecto verás cada contenedor por separado con su estado y podrás actuar sobre él individualmente, igual que sobre los contenedores standalone.

Las acciones globales (arrancar, parar, reiniciar o eliminar el proyecto entero) están disponibles como un botón adicional dentro del menú del proyecto.

📢 Si configuro TELEGRAM_NOTIFICATION_CHANNEL, ¿se duplican las notificaciones?

No. Cuando se define ese canal, los avisos de cambio de estado de los contenedores (arranque, parada, caída, actualización disponible…) van solo a ese canal y dejan de aparecer en el chat principal.

El resto de mensajes (resultados de comandos, menús interactivos, etc.) siguen llegando al chat normal donde hablas con el bot.

🔄 ¿Cómo actualizo el propio bot?

Igual que cualquier otro contenedor: desde /checkupdate docker-controller-bot o desde /updateall.

Internamente el bot lanza un contenedor auxiliar (UPDATER-Docker-Controler-Bot) que se encarga de descargar la nueva imagen, sustituirla y volver a levantar el bot, evitando que el propio bot se quede sin proceso a mitad de la actualización.

Si le añades la label DCB-Auto-Update a su docker-compose.yml, se actualizará solo en cuanto detecte una nueva versión.


Solo para desarrolladores

Ejecución con código local

Para su ejecución en local y probar nuevos cambios de código, se necesita renombrar el fichero .env-example a .env con los valores necesarios para su ejecución. Es necesario establecer un TELEGRAM_TOKEN y un TELEGRAM_ADMIN correctos y diferentes al de la ejecución normal.

La estructura de carpetas debe quedar:

docker-controller-bot/
    ├── .env
    ├── .gitignore
    ├── LICENSE
    ├── requirements.txt
    ├── README.md
    ├── config.py
    ├── docker-controller-bot.py
    ├── Dockerfile_local
    ├── docker-compose.yaml
    └── locale
        ├── en.json
        ├── es.json
        ├── de.json
        ├── ru.json
        ├── gl.json
        ├── nl.json
        ├── cat.json
        └── it.json

Para levantarlo habría que ejecutar en esa ruta: docker compose -f docker-compose.debug.yaml up -d --build --force-recreate Para detenerlo y eliminarlo: docker compose down --rmi

Para probar nuevos cambios bastaría con guardar. Los cambios se refrescan en caliente.

Depuración con VS Code

Abre la carpeta del repositorio en Visual Studio Code necesitaras las siguientes extensiones instaladas en VS Code:

Instalación de las extensiones

  1. Abre VS Code.
  2. Ve a la extensión de la barra lateral y busca "Docker" y "Python".
  3. Instala ambas extensiones desde el Marketplace.

Establecer Puntos de Parada (Breakpoints)

  1. Abre el archivo de código que deseas depurar.
  2. Haz clic en el margen izquierdo junto a la línea de código donde quieras establecer un punto de parada. Aparecerá un punto rojo indicando el breakpoint.

Iniciar la Depuración

  1. Ve al menú Run y selecciona Start Debugging o presiona F5.
  2. VS Code arrancará el docker-compose.debug.yaml y comenzará la depuración.
  3. La ventana de depuración se abrirá en la parte inferior, mostrando las variables, la pila de llamadas y la consola de depuración.

Depuracion

Conclusión de la Depuración

  • Para detener la sesión de depuración, ve a Run > Stop Debugging o presiona Shift+F5