fix(zigbee2mqtt): drop FRONTEND_* env that crashes z2m 1.42 on boot
All checks were successful
CI / validate (pull_request) Successful in 8s
CI / shellcheck (pull_request) Successful in 13s
CI / validate (push) Successful in 5s
CI / shellcheck (push) Successful in 12s

z2m 1.42's default config is `frontend: true` (boolean shorthand). A
nested env override like ZIGBEE2MQTT_CONFIG_FRONTEND_PORT/_ENABLED makes
z2m try to write a property onto that boolean and die at startup with
"Cannot create property 'port' on boolean 'true'", crash-looping the
container. The default frontend already listens on 8080, which we publish
as host 8084, so no override is needed — remove both lines. Also correct
the comment: zigbee-herdsman opens the serial adapter before connecting to
MQTT, so a stickless box never reaches the broker.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Daniel Maksymilian Syrnicki 2026-06-28 13:03:49 +02:00
parent 3408e1aad8
commit 09a89a8517

View file

@ -16,9 +16,18 @@
# the validator rejects non-directories and the /dev deny-list). The `devices` # the validator rejects non-directories and the /dev deny-list). The `devices`
# entry maps that host device into the container. The `:-/dev/null` fallback is # entry maps that host device into the container. The `:-/dev/null` fallback is
# ONLY so `docker compose config` (catalog validation, run with no .env) parses # ONLY so `docker compose config` (catalog validation, run with no .env) parses
# cleanly; a real install always has the device set. On a box with no stick # cleanly; a real install always has the device set. zigbee-herdsman opens the
# attached the container won't fully come up — it still connects to MQTT first, # serial adapter BEFORE connecting to MQTT, so on a box with no stick attached
# which is enough to confirm the dependency/credential handshake. # the container exits early and never reaches the broker — the dependency
# handshake is verified provider-side instead (the account + creds land in this
# app's .env at install time).
#
# Frontend: z2m 1.42's default config is `frontend: true` (boolean shorthand,
# enabled on port 8080). We deliberately set NO ZIGBEE2MQTT_CONFIG_FRONTEND_*
# env here: a nested override like FRONTEND_PORT/FRONTEND_ENABLED makes z2m try
# to write a property onto that boolean and crash on boot with
# "Cannot create property 'port' on boolean 'true'". The default 8080 is what we
# publish to the host as 8084 below, so no override is needed.
# #
# Port 8084 on the host -> 8080 in the container (8080 is taken by it-tools). # Port 8084 on the host -> 8080 in the container (8080 is taken by it-tools).
# #
@ -36,8 +45,6 @@ services:
- ZIGBEE2MQTT_CONFIG_MQTT_USER=${MQTT_USER} - ZIGBEE2MQTT_CONFIG_MQTT_USER=${MQTT_USER}
- ZIGBEE2MQTT_CONFIG_MQTT_PASSWORD=${MQTT_PASS} - ZIGBEE2MQTT_CONFIG_MQTT_PASSWORD=${MQTT_PASS}
- ZIGBEE2MQTT_CONFIG_SERIAL_PORT=${ZIGBEE_SERIAL_PORT} - ZIGBEE2MQTT_CONFIG_SERIAL_PORT=${ZIGBEE_SERIAL_PORT}
- ZIGBEE2MQTT_CONFIG_FRONTEND_ENABLED=true
- ZIGBEE2MQTT_CONFIG_FRONTEND_PORT=8080
devices: devices:
- ${ZIGBEE_SERIAL_PORT:-/dev/null}:${ZIGBEE_SERIAL_PORT:-/dev/null} - ${ZIGBEE_SERIAL_PORT:-/dev/null}:${ZIGBEE_SERIAL_PORT:-/dev/null}
extra_hosts: extra_hosts: