Skip to main content

Send your docker stats and and events to mqtt and discovery them in home assistant.

Project description

docker2mqtt - Deliver docker status information over MQTT

Mypy Ruff Markdownlint Publish

This program uses docker events to watch for changes in your docker containers, and docker stats for metrics about those containers, and delivers current status to MQTT. It will also publish Home Assistant MQTT Discovery messages so that (binary) sensors automatically show up in Home Assistant.

This is part of a family of similar tools:

Installation and Deployment

It is available as python package on pypi/docker2mqtt or as a docker image on ghcr.io/docker2mqtt.

Pypi package

PyPI version

pip install docker2mqtt
docker2mqtt --name MyDockerName --events -vvvvv

Usage

from docker2mqtt import Docker2Mqtt, DEFAULT_CONFIG

cfg = Docker2MqttConfig({ 
  **DEFAULT_CONFIG,
  "host": "mosquitto",
  "enable_events": True
})

try:
  docker2mqtt = Docker2Mqtt(cfg)
  docker2mqtt.loop_busy()

except Exception as ex:
  # Do something

Docker image

1 2 3

Use docker to launch this. Please note that you must give it access to your docker socket, which is typically located at /var/run/docker.sock. A typical invocation is:

docker run --network mqtt -e MQTT_HOST=mosquitto -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/miaucl/docker2mqtt

You can also use docker compose:

services:
  docker2mqtt:
    container_name: docker2mqtt
    image: ghcr.io/miaucl/docker2mqtt
    environment:
      - DOCKER2MQTT_HOSTNAME=my_docker_host
      - MQTT_HOST=mosquitto
      - MQTT_USER=username
      - MQTT_PASSWD=password
      - EVENTS=1
      - STATS=1
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

Default Configuration

You can use environment variables to control the behavior.

Config Env Variable Default Description
log_level LOG_LEVEL INFO Set to DEBUG,INFO,WARN,ERROR,CRITICAL to enable different levels of verbosity.
docker2mqtt_hostname DOCKER2MQTT_HOSTNAME docker2mqtt Container Hostname The hostname of your docker host. This will be the container's hostname by default, you probably want to override it.
homeassistant_prefix HOMEASSISTANT_PREFIX homeassistant The prefix for Home Assistant discovery. Must be the same as discovery_prefix in your Home Assistant configuration.
mqtt_client_id MQTT_CLIENT_ID mqtt2discord The client id to send to the MQTT broker.
mqtt_host MQTT_HOST localhost The MQTT broker to connect to.
mqtt_port MQTT_PORT 1883 The port on the broker to connect to.
mqtt_user MQTT_USER The user to send to the MQTT broker. Leave unset to disable authentication.
mqtt_password MQTT_PASSWD The password to send to the MQTT broker. Leave unset to disable authentication.
mqtt_timeout MQTT_TIMEOUT 30 The timeout for the MQTT connection.
mqtt_topic_prefix MQTT_TOPIC_PREFIX docker The MQTT topic prefix. With the default data will be published to docker/<hostname>.
mqtt_qos MQTT_QOS 1 The MQTT QOS level
container_whitelist CONTAINER_WHITELIST Define a whitelist for containers to consider, if empty, everything is monitored. The entries are either match as literal strings or as regex.
container_blacklist CONTAINER_BLACKLIST Define a blacklist for containers to consider, takes priority over whitelist. The entries are either match as literal strings or as regex.
destroyed_container_ttl DESTROYED_CONTAINER_TTL 86400 How long, in seconds, before destroyed containers are removed from Home Assistant. Containers won't be removed if the service is restarted before the TTL expires.
stats_record_seconds STATS_RECORD_SECONDS 30 The number of seconds to record state and make an average
enable_events EVENTS 0 1 Or 0 for processing events
enable_stats STATS 0 1 Or 0 for processing statistics

Consuming The Data

Data is published to the topic docker/<DOCKER2MQTT_HOSTNAME>/<container>/events using JSON serialization. It will arrive whenever a change happens and its type can be inspected in type_definitions.py or the documentation.

Data is also published to the topic docker/<DOCKER2MQTT_HOSTNAME>/<container>/stats using JSON serialization. It will arrive every STATS_RECORD_SECONDS seconds or so and its type can be inspected in type_definitions.py or the documentation.

Home Assistant

Once docker2mqtt is collecting data and publishing it to MQTT, it's rather trivial to use the data in Home Assistant.

A few assumptions:

  • Home Assistant is already configured to use a MQTT broker. Setting up MQTT and HA is beyond the scope of this documentation. However, there are a lot of great tutorials on YouTube. An external broker (or as add-on) like Mosquitto will need to be installed and the HA MQTT integration configured.
  • The HA MQTT integration is configured to use homeassistant as the MQTT autodiscovery prefix. This is the default for the integration and also the default for docker2mqtt. If you have changed this from the default, use the --prefix parameter to specify the correct one.
  • You're not using TLS to connect to the MQTT broker. Currently docker2mqtt only works with unencrypted connections. Username / password authentication can be specified with the --username and --password parameters, but TLS encryption is not yet supported.

After you start the service (binary) sensors should show up in Home Assistant immediately. Look for sensors that start with (binary_)sensor.docker. Metadata about the container will be available as attributes for events, which you can then expose using template sensors if you wish.

Screenshot of Home Assistant sensor showing status and attributes.

Documentation

Using mkdocs, the documentation and reference is generated and available on github pages.

Dev

Setup the dev environment using VSCode, it is highly recommended.

python -m venv .venv
source .venv/bin/activate
pip install -r requirements_dev.txt

Install pre-commit

pre-commit install

# Run the commit hooks manually
pre-commit run --all-files

Following VSCode integrations may be helpful:

Releasing

It is only possible to release a final version on the master branch. For it to pass the gates of the publish workflow, it must have the same version in the tag, the setup.cfg, the bring_api/__init__.py and an entry in the CHANGELOG.md file.

To release a prerelease version, no changelog entry is required, but it can only happen on a feature branch (not master branch). Also, prerelease versions are marked as such in the github release page.

Credits

This is a detached fork from the repo https://github.com/skullydazed/docker2mqtt, which does not seem to get evolved anymore.

CHANGELOG

2.1.0

  • Update version package identifier and bump setuptools
  • Fix mypy setup

2.0.5

  • Re-release due to bad deploy pipeline

2.0.4

  • Update the discovery jsons for home assistant

2.0.3

  • Transform the mqtt port cli arg to int as a str is not accepted by the paho.mqtt library
  • Fix the container filter not only at startup but also at runtime

2.0.2

  • Add version cli options to display package version
  • Separate the entrypoints for cli (using cli arguments) and docker (using env vars)

2.0.1

  • Fix white- and blacklist config via docker env where and empty string resulted in a pass-all regex overwriting the blacklist.

2.0.0

  • Rework of the complete structure, but no functional changes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docker2mqtt-2.1.0.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

docker2mqtt-2.1.0-py3-none-any.whl (21.8 kB view details)

Uploaded Python 3

File details

Details for the file docker2mqtt-2.1.0.tar.gz.

File metadata

  • Download URL: docker2mqtt-2.1.0.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for docker2mqtt-2.1.0.tar.gz
Algorithm Hash digest
SHA256 11cfd39372f45adec064db54c99b75d2a6d9c288a0170e36c41c1ad68c0640f3
MD5 c86f1aa41e15737c1451e35d58536ceb
BLAKE2b-256 e559aaefa5787670d3833823f0edb317c54847aa695a95efc55dd5c41241a960

See more details on using hashes here.

File details

Details for the file docker2mqtt-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: docker2mqtt-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 21.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for docker2mqtt-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bc887c238a40c6e5682447a370d07f6849f9db4a37fa79d6f5522e547f5d5912
MD5 8f6cfe917ca430749b29b6f096fd99a0
BLAKE2b-256 4ce2ddffe88401c653af58b354d8a25cedae428c183450d9bd91d3b6a1a73f77

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page