Docker-Controller-Bot, tus contenedores en la palma de la mano
Bot de Telegram para el control absoluto de todos tus contenedores Docker.

Regístrate en HDS+
Tutoriales y soporte sobre sistemas NAS, Redes, Docker y SelfHosting.
Sin SPAM. Es gratuito. Ten acceso a todo el contenido.
Tras un tiempo pensando en desarrollar algo así, al fin me he animado a ello. ¿Qué te parece si te digo que puedes controlar todos tus contenedores docker desde Telegram? Ese es el tema que nos atañe hoy. Además de de ser realmente sencillo de instalar.
Requisitos previos
Solo serán 2 requisitos muy básicos:
- Tener docker (con docker-compose) instalado en el servidor
- Tener un bot de telegram (token y chatId)


@BotFather para la creación del bot y @cid_bot para la obtención del chatID de nuestro usuario
En mi caso los datos serían:
TOKEN="6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo"
ID="4405089"
(No puedes usar estos datos, has de crear tu bot y obtener los tuyos propios)
Instalación del bot

La instalación de este contenedor no requiere crear carpeta alguna, es tan sencillo como ejecutar el siguiente docker-compose:
version: '3.3'
services:
docker-controller-bot:
environment:
- TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
- TELEGRAM_ADMIN=4405089
- CONTAINER_NAME=Docker-Controller-Bot
volumes:
- /var/run/docker.sock:/var/run/docker.sock
image: dgongut/docker-controller-bot:latest
container_name: Docker-Controller-Bot
restart: always
network_mode: host
tty: true
TELEGRAM_TOKEN y TELEGRAM_ADMIN por los datos de vuestro bot.
CONTAINER_NAME por el nombre que le hayáis puesto al bot en la propiedad container_name
En Synology
En este caso sí podemos crear una carpeta para almacenar el fichero docker-compose.yaml, en mi caso he creado la siguiente: /docker/docker-controller-bot
- Crearemos un nuevo proyecto en Container Manager.
- Seleccionamos la carpeta de
docker-controller-bot
y nos autodetectará el fichero, ya solo sería pulsar en siguiente sin modificar nada hasta completar su instalación



En las capturas falta la variable CONTAINER_NAME

En UnRAID también es muy sencillo, puesto que está la plantilla oficial y nos pedirá los mismos datos que hemos descrito anteriormente:


Uso del bot
Nos dirigimos al bot en Telegram y pulsamos en el botón Iniciar que nos aparecerá debajo. Si todo ha ido bien, nos responderá al comando /start con el menú principal.
A este menú podemos acceder siempre que queramos escribiendo /start o bien accediendo al menú de abajo a la izquierda.


Este es el menú que aparece en la versión 1.0, podrían añadirse más funciones en un futuro.
Estos comandos tienen la posibilidad de ser usados de 2 formas diferentes:
- Pulsando sobre el menú o escribiendo el comando, hará que nos aparezca un desplegable con botones para pulsar en el contenedor que queramos

- Otra forma de usarlo es si conocemos el nombre exacto de nuestro contenedor podemos escribirlo a continuación del comando

Algunos ejemplos de otros comandos serían, por orden: /info
, /compose
, /logfile
y /list




Funciones extra
Estado de los contenedores
La primera función en segundo plano es la de chequear el estado de los contenedores. Si un contenedor se cierra o se inicia, aunque no se haya realizado a través del bot, éste nos notificará de tal suceso.
Actualizaciones
El bot se encuentra chequeando actualizaciones de los contenedores en segundo plano.
Este proceso se realiza cada 4h pero se puede modificar esta frecuencia añadiendo al docker-compose la variable: CHECK_UPDATE_EVERY_HOURS
.
Por ejemplo, si quisiéramos que este chequeo fuera cada 3 días (72h) bastaría con dejar el docker-compose de la siguiente manera:
version: '3.3'
services:
docker-controller-bot:
environment:
- TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
- TELEGRAM_ADMIN=4405089
- CONTAINER_NAME=Docker-Controller-Bot
- CHECK_UPDATE_EVERY_HOURS=72
volumes:
- /var/run/docker.sock:/var/run/docker.sock
image: dgongut/docker-controller-bot:latest
container_name: Docker-Controller-Bot
restart: always
network_mode: host
tty: true
TELEGRAM_TOKEN y TELEGRAM_ADMIN por los datos de vuestro bot.
CONTAINER_NAME por el nombre que le hayáis puesto al bot en la propiedad container_name
Además tanto desde el comando /info
como en el mismo mensaje de actualización disponible nos da la opción de actualizar dicho contenedor, algo extremadamente útil y que podremos realizar en cualquier momento en un clic.
Ejemplo de un mensaje de actualización:

Si queréis desactivar esta función basta con añadir la variable CHECK_UPDATES=0
de la siguiente manera:
version: '3.3'
services:
docker-controller-bot:
environment:
- TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
- TELEGRAM_ADMIN=4405089
- CONTAINER_NAME=Docker-Controller-Bot
- CHECK_UPDATES=0
volumes:
- /var/run/docker.sock:/var/run/docker.sock
image: dgongut/docker-controller-bot:latest
container_name: Docker-Controller-Bot
restart: always
network_mode: host
tty: true
Uso en grupos
Si eres de los que te gusta el orden como a mí, seguramente tengas varios bots dentro de un grupo en el cual recibes notificaciones de todos ellos. Docker-Controller-Bot está preparado para ese uso, solamente hay que añadir la variable TELEGRAM_GROUP
con el chatId del grupo. Al añadir el bot al grupo, hay que darle permisos de administrador para que pueda borrar mensajes.
version: '3.3'
services:
docker-controller-bot:
environment:
- TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
- TELEGRAM_ADMIN=4405089
- CONTAINER_NAME=Docker-Controller-Bot
- TELEGRAM_GROUP=-102138927398
volumes:
- /var/run/docker.sock:/var/run/docker.sock
image: dgongut/docker-controller-bot:latest
container_name: Docker-Controller-Bot
restart: always
network_mode: host
tty: true
TELEGRAM_TOKEN y TELEGRAM_ADMIN por los datos de vuestro bot.
CONTAINER_NAME por el nombre que le hayáis puesto al bot en la propiedad container_name
Logs avanzados
El bot irá escribiendo en los logs todas las interacciones y todo lo que va haciendo en cada momento. Esto será de gran ayuda en caso de que algo no vaya como esperábamos.
Por ejemplo, una cosa muy útil que he integrado es que siempre que alguien interactúe con el bot, este escriba tanto el chatId del usuario como del chat donde se ha escrito en los logs. Si no conocemos qué valor tenemos que poner en la variable TELEGRAM_GROUP
, basta con escribirle al bot dentro del grupo y mirar los logs.
Comentarios del desarrollador
En esta ocasión, no es una recomendación externa, sino un programa desarrollado por mí mismo. Podéis verlo en /version
, en mi DockerHub o en mi GitHub puesto que es de código abierto.
He tratado de seguir las siguientes líneas de diseño:
- Utilidad máxima
- Facilidad de uso
- Atención al detalle
- Minimo consumo (apenas 30MB de RAM)
- Velocidad
No por ello está exento de posibles fallos. He contado con la inmensa ayuda de Joan y Antonio que han sido mis betatester estas semanas, en las cuales hemos descubierto muchísimos pequeños errores y mejoras las cuales se han ido puliendo hasta ofrecer el programa que tenemos a día de hoy.
Como aún se encuentra en una fase muy temprana, v1.0.0
(docker-compose actualizados a la version v.1.1.0
) a fecha de este post, me gustaría en la medida de lo posible que me comentarais personalmente si encontráis algún fallo o si tenéis alguna sugerencia. No muerdo, podéis encontrarme en Telegram como @dgongut.