修复docker-compose报错:teslamate服务不支持database配置项
问题根因
报错完全是YAML缩进错误导致的。你把database、grafana、mosquitto三个服务,错写到了teslamate服务的配置缩进层级里,Docker Compose直接把这三个字段识别成teslamate服务下的非法配置项,才会抛出Unsupported config option for services.teslamate: 'database'的错误。
YAML对缩进要求非常严格,同级配置必须保持缩进一致,子配置要比父配置多缩进固定数量的空格(全文件统一用2个或4个都可以)。你写的database、grafana、mosquitto三个服务名,缩进深度和teslamate下的cap_drop、volumes这类子属性完全一样,自然会被判定为teslamate的子配置,而不是和它平级的独立服务。
修正后的完整配置
直接替换原有docker-compose.yml内容即可,注意对齐细节:
version: "3" services: teslamate: image: teslamate/teslamate restart: always environment: - ENCRYPTION_KEY=<Insert Key> - DB_USER=teslamate - DB_PASS=<Insert password> - DB_NAME=teslamate - DB_HOST=database - MQTT_HOST=mosquitto - VIRTUAL_HOST=<Insert IP address> # 如果需要从其他机器访问UI,把值替换为docker宿主机的主机名/IP地址 - TZ=Asia/Shanghai # 可选,替换为本地标准时区后debug日志会使用本地时间 ports: - 4000:4000 volumes: - ./import:/opt/app/import cap_drop: - all database: image: postgres:14 restart: always environment: - POSTGRES_USER=teslamate - POSTGRES_PASSWORD=<Insert password> - POSTGRES_DB=teslamate volumes: - teslamate-db:/var/lib/postgresql/data grafana: image: teslamate/grafana restart: always environment: - DATABASE_USER=teslamate - DATABASE_PASS=goforit - DATABASE_NAME=teslamate - DATABASE_HOST=database ports: - 3000:3000 volumes: - teslamate-grafana-data:/var/lib/grafana mosquitto: image: eclipse-mosquitto:2 restart: always command: mosquitto -c /mosquitto-no-auth.conf # ports: # - 1883:1883 volumes: - mosquitto-conf:/mosquitto/config - mosquitto-data:/mosquitto/data volumes: teslamate-db: teslamate-grafana-data: mosquitto-conf: mosquitto-data:
额外要注意的配置坑
- 环境变量等号后面不要加多余空格,你原来写的
ENCRYPTION_KEY= <Insert Key>、DB_PASS= <Insert password>、DATABASE_PASS= goforit这类写法,等号后的空格会被算成变量值的一部分,后续会出现数据库连接失败、鉴权不通过的问题,直接把等号和值连起来写就行。 TZ时区不要填US这种模糊值,必须填标准时区格式,比如国内使用填Asia/Shanghai,美国东部填America/New_York,不然时区配置不会生效。- 后续加新服务的时候,服务名要和
teslamate、database这些现有服务保持完全一致的缩进深度,不要多缩进。
改完直接重新执行docker-compose up -d就能正常启动服务。
内容的提问来源于stack exchange,提问作者Docfxit
相关产品推荐
相关产品推荐

