ha-addon
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseHome Assistant Add-On Development
Home Assistant 插件开发
Expert guidance for building, configuring, and publishing Home Assistant add-ons with Docker, Supervisor integration, and multi-architecture support.
提供使用Docker、Supervisor集成和多架构支持来构建、配置和发布Home Assistant插件的专业指导。
Before You Start
开始之前
This skill prevents common Home Assistant add-on development errors:
| Issue | Symptom | Solution |
|---|---|---|
| Permission errors | | Use correct SUPERVISOR_TOKEN and API endpoints |
| Configuration validation | Add-on won't load | Validate config.yaml schema before publishing |
| Docker base image errors | Missing dependencies in runtime | Use official Home Assistant base images (ghcr.io/home-assistant) |
| Ingress misconfiguration | Web UI not accessible through HA | Configure nginx reverse proxy correctly |
| Multi-arch build failures | Add-on only works on one architecture | Set up build.yaml with architecture matrix |
本技能可避免Home Assistant插件开发中的常见错误:
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 权限错误 | 调用Supervisor API时出现 | 使用正确的SUPERVISOR_TOKEN和API端点 |
| 配置验证失败 | 插件无法加载 | 发布前验证config.yaml的 schema |
| Docker基础镜像错误 | 运行时缺少依赖项 | 使用官方Home Assistant基础镜像(ghcr.io/home-assistant) |
| Ingress配置错误 | 无法通过HA访问Web UI | 正确配置nginx反向代理 |
| 多架构构建失败 | 插件仅在一种架构上可用 | 在build.yaml中设置架构矩阵 |
Quick Start: Create an Add-On from Scratch
快速入门:从零创建插件
Step 1: Create the Add-On Directory Structure
步骤1:创建插件目录结构
bash
mkdir -p my-addon/{rootfs,rootfs/etc/s6-overlay/s6-rc.d/service-name}
cd my-addonWhy this matters: Home Assistant expects specific directory layouts. The contains your actual application files that get packaged into the Docker image.
rootfs/bash
mkdir -p my-addon/{rootfs,rootfs/etc/s6-overlay/s6-rc.d/service-name}
cd my-addon重要性: Home Assistant要求特定的目录布局。包含将打包到Docker镜像中的实际应用文件。
rootfs/Step 2: Create config.yaml
步骤2:创建config.yaml
yaml
---
name: My Custom Add-On
description: My awesome Home Assistant add-on
version: 1.0.0
slug: my-addon
image: ghcr.io/home-assistant/{arch}-addon-my-addon
arch:
- amd64
- armv7
- aarch64
ports:
8080/tcp: null
options:
debug: false
schema:
debug: bool
permissions:
- homeassistant # Read/write Home Assistant core dataWhy this matters: This is your add-on's manifest. The slug becomes the internal identifier and determines where configuration is stored.
yaml
---
name: My Custom Add-On
description: My awesome Home Assistant add-on
version: 1.0.0
slug: my-addon
image: ghcr.io/home-assistant/{arch}-addon-my-addon
arch:
- amd64
- armv7
- aarch64
ports:
8080/tcp: null
options:
debug: false
schema:
debug: bool
permissions:
- homeassistant # 读写Home Assistant核心数据重要性: 这是你的插件清单文件。slug会成为内部标识符,并决定配置的存储位置。
Step 3: Create the Dockerfile
步骤3:创建Dockerfile
dockerfile
FROM ghcr.io/home-assistant/amd64-base:latestdockerfile
FROM ghcr.io/home-assistant/amd64-base:latestInstall dependencies
安装依赖
RUN apk add --no-cache python3 py3-pip
RUN apk add --no-cache python3 py3-pip
Copy application
复制应用
COPY rootfs /
COPY rootfs /
Set working directory
设置工作目录
WORKDIR /app
WORKDIR /app
Install Python packages if needed
如有需要,安装Python包
RUN if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
RUN if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
Run using S6 overlay
使用S6 overlay运行
CMD ["/init"]
**Why this matters:** Using Home Assistant base images includes critical runtime components (S6 overlay, bashio helpers, supervisor integration).CMD ["/init"]
**重要性:** 使用Home Assistant基础镜像包含关键的运行时组件(S6 overlay、bashio辅助工具、Supervisor集成)。Step 4: Create S6 Service Script
步骤4:创建S6服务脚本
Create :
rootfs/etc/s6-overlay/s6-rc.d/service-name/runbash
#!/command/execlineb -P
foreground { echo "Starting my add-on..." }
/app/my-serviceMake it executable:
bash
chmod +x rootfs/etc/s6-overlay/s6-rc.d/service-name/runWhy this matters: S6 overlay is Home Assistant's init system. It manages service startup, logging, and graceful shutdown.
创建:
rootfs/etc/s6-overlay/s6-rc.d/service-name/runbash
#!/command/execlineb -P
foreground { echo "Starting my add-on..." }
/app/my-service设置可执行权限:
bash
chmod +x rootfs/etc/s6-overlay/s6-rc.d/service-name/run重要性: S6 overlay是Home Assistant的初始化系统,负责管理服务启动、日志记录和优雅关闭。
Critical Rules
关键规则
✅ Always Do
✅ 必须遵守
- ✅ Use official Home Assistant base images (ghcr.io/home-assistant/{arch}-base)
- ✅ Include all supported architectures in config.yaml (amd64, armv7, aarch64)
- ✅ Use bashio helper functions for common operations (bashio::log::info, bashio::addon::option)
- ✅ Validate config.yaml schema before releasing
- ✅ Document configuration options in the schema section
- ✅ Include addon_uuid in logs for debugging
- ✅ 使用官方Home Assistant基础镜像(ghcr.io/home-assistant/{arch}-base)
- ✅ 在config.yaml中包含所有支持的架构(amd64、armv7、aarch64)
- ✅ 使用bashio辅助函数完成常见操作(bashio::log::info、bashio::addon::option)
- ✅ 发布前验证config.yaml的schema
- ✅ 在schema部分记录配置选项
- ✅ 在日志中包含addon_uuid以便调试
❌ Never Do
❌ 禁止操作
- ❌ Don't hardcode paths - use bashio to get configuration directory (/data/)
- ❌ Don't run services as root unless absolutely necessary (set USER in Dockerfile)
- ❌ Don't call supervisor API without SUPERVISOR_TOKEN
- ❌ Don't ignore SIGTERM signals - implement graceful shutdown
- ❌ Don't assume one architecture - use {arch} placeholder in image names
- ❌ Don't store data outside /data/ - Home Assistant won't persist it
- ❌ 不要硬编码路径 - 使用bashio获取配置目录(/data/)
- ❌ 除非绝对必要,否则不要以root身份运行服务(在Dockerfile中设置USER)
- ❌ 不要在没有SUPERVISOR_TOKEN的情况下调用Supervisor API
- ❌ 不要忽略SIGTERM信号 - 实现优雅关闭
- ❌ 不要假设仅支持一种架构 - 在镜像名称中使用{arch}占位符
- ❌ 不要在/data/之外存储数据 - Home Assistant不会持久化这些数据
Common Mistakes
常见错误
❌ Wrong: Hardcoded paths
bash
#!/bin/bash
CONFIG_PATH="/config/my-addon"✅ Correct: Using bashio for configuration
bash
#!/command/execlineb -P
CONFIG_PATH=${"$(bashio::addon::config_path)"}Why: bashio handles path resolution and ensures your add-on works in any Home Assistant installation.
❌ 错误示例:硬编码路径
bash
#!/bin/bash
CONFIG_PATH="/config/my-addon"✅ 正确示例:使用bashio获取配置
bash
#!/command/execlineb -P
CONFIG_PATH=${"$(bashio::addon::config_path)"}原因: bashio处理路径解析,确保你的插件在任何Home Assistant安装环境中都能正常工作。
Configuration Reference
配置参考
config.yaml Structure
config.yaml结构
yaml
---
name: String # Display name
description: String # Short description
version: String # Semantic version (1.0.0)
slug: String # URL-safe identifier
image: String # Docker image URL with {arch} placeholder
arch:
- amd64|armv7|aarch64|armhf|i386 # Supported architectures
ports:
8080/tcp: null # TCP port (null=internal only, number=external)
53/udp: 53 # UDP with external port mapping
devices:
- /dev/ttyACM0 # Device access
services:
- mysql # Depends on other service
options:
debug: false # User configuration options
log_level: info
schema:
debug: bool # Configuration validation schema
log_level:
- debug
- info
- warning
- error
permissions:
- homeassistant # Read/write HA config
- hassio # Full supervisor API access
- admin # Broad system access
- backup # Backup/restore operations
environment:
NODE_ENV: production
webui: http://[HOST]:[PORT:8080] # Web UI URL pattern
ingress: true # Enable ingress proxy
ingress_port: 8080 # Internal port for ingress
ingress_entry: / # URL path for ingress entryKey settings:
- : Used internally and in supervisor API calls
slug - : List all supported architectures or builds fail
arch - : Must use {arch} placeholder for dynamic builds
image - : User-configurable settings
options - : Controls supervisor API access level
permissions - : Enables reverse proxy for web UIs
ingress
yaml
---
name: String # 显示名称
description: String # 简短描述
version: String # 语义化版本(1.0.0)
slug: String # URL安全的标识符
image: String # 带有{arch}占位符的Docker镜像URL
arch:
- amd64|armv7|aarch64|armhf|i386 # 支持的架构
ports:
8080/tcp: null # TCP端口(null=仅内部访问,数字=外部映射)
53/udp: 53 # UDP端口及外部映射
devices:
- /dev/ttyACM0 # 设备访问权限
services:
- mysql # 依赖其他服务
options:
debug: false # 用户可配置选项
log_level: info
schema:
debug: bool # 配置验证schema
log_level:
- debug
- info
- warning
- error
permissions:
- homeassistant # 读写HA配置
- hassio # 完整Supervisor API访问权限
- admin # 广泛的系统访问权限
- backup # 备份/恢复操作权限
environment:
NODE_ENV: production
webui: http://[HOST]:[PORT:8080] # Web UI URL模板
ingress: true # 启用ingress代理
ingress_port: 8080 # ingress使用的内部端口
ingress_entry: / # ingress入口的URL路径关键设置:
- : 用于内部和Supervisor API调用
slug - : 列出所有支持的架构,否则构建会失败
arch - : 必须使用{arch}占位符以支持动态构建
image - : 用户可配置的设置
options - : 控制Supervisor API的访问级别
permissions - : 为Web UI启用反向代理
ingress
Common Patterns
常见模式
Using bashio for Logging
使用bashio记录日志
bash
#!/command/execlineb -P
foreground { bashio::log::info "Add-on started" }
foreground { bashio::log::warning "Low disk space" }
foreground { bashio::log::error "Failed to connect" }bash
#!/command/execlineb -P
foreground { bashio::log::info "Add-on started" }
foreground { bashio::log::warning "Low disk space" }
foreground { bashio::log::error "Failed to connect" }Accessing Configuration Options
访问配置选项
bash
#!/command/execlineb -P
define DEBUG "$(bashio::addon::option 'debug')"
define LOG_LEVEL "$(bashio::addon::option 'log_level')"
if { test "${DEBUG}" = "true" }
bashio::log::debug "Debug mode enabled"bash
#!/command/execlineb -P
define DEBUG "$(bashio::addon::option 'debug')"
define LOG_LEVEL "$(bashio::addon::option 'log_level')"
if { test "${DEBUG}" = "true" }
bashio::log::debug "Debug mode enabled"Supervisor API Communication
与Supervisor API通信
bash
#!/bin/bashbash
#!/bin/bashGet addon info
获取插件信息
Send notification
发送通知
curl -X POST
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
-H "Content-Type: application/json"
-d '{"message":"Warning message"}'
http://supervisor/notifications/create
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
-H "Content-Type: application/json"
-d '{"message":"Warning message"}'
http://supervisor/notifications/create
undefinedcurl -X POST
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
-H "Content-Type: application/json"
-d '{"message":"Warning message"}'
http://supervisor/notifications/create
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
-H "Content-Type: application/json"
-d '{"message":"Warning message"}'
http://supervisor/notifications/create
undefinedMulti-Arch Docker Build
多架构Docker构建
Create :
build.yamlyaml
build_from:
amd64: ghcr.io/home-assistant/amd64-base:latest
armv7: ghcr.io/home-assistant/armv7-base:latest
aarch64: ghcr.io/home-assistant/aarch64-base:latest
armhf: ghcr.io/home-assistant/armhf-base:latest
codenotary: your-notary-id # Optional code signing创建:
build.yamlyaml
build_from:
amd64: ghcr.io/home-assistant/amd64-base:latest
armv7: ghcr.io/home-assistant/armv7-base:latest
aarch64: ghcr.io/home-assistant/aarch64-base:latest
armhf: ghcr.io/home-assistant/armhf-base:latest
codenotary: your-notary-id # 可选的代码签名Ingress Configuration for Web UIs
Web UI的Ingress配置
yaml
ingress: true
ingress_port: 8080
ingress_entry: /yaml
ingress: true
ingress_port: 8080
ingress_entry: /Optional ingress_stream for streaming endpoints
可选的ingress_stream用于流端点
Inside your app, use correct reverse proxy headers:
```bash
在你的应用中,使用正确的反向代理头:
```bashnginx configuration in your app
应用中的nginx配置
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://localhost:8080;
}
undefinedlocation / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://localhost:8080;
}
undefinedKnown Issues Prevention
已知问题预防
| Issue | Root Cause | Solution |
|---|---|---|
| Add-on fails to start | Missing S6 service files | Create |
| Supervisor API returns 401 | Invalid SUPERVISOR_TOKEN | Verify token is set by Home Assistant (check logs with |
| Configuration not persisting | Saving outside /data/ | Always use bashio::addon::config_path or /data/ for persistence |
| Port already in use | Multiple services on same port | Check configuration - each service needs unique port |
| Architecture mismatch | {arch} placeholder not used | Use exact placeholder in image field: |
| Build fails with "Unknown architecture" | config.yaml lists unsupported arch | Use only: amd64, armv7, aarch64, armhf, i386 |
| 问题 | 根本原因 | 解决方案 |
|---|---|---|
| 插件无法启动 | 缺少S6服务文件 | 创建 |
| Supervisor API返回401 | SUPERVISOR_TOKEN无效 | 验证Home Assistant是否已设置token(使用 |
| 配置未持久化 | 在/data/之外保存数据 | 始终使用bashio::addon::config_path或/data/来存储持久化数据 |
| 端口已被占用 | 多个服务使用同一端口 | 检查配置 - 每个服务需要唯一的端口 |
| 架构不匹配 | 未使用{arch}占位符 | 在镜像字段中使用正确的占位符: |
| 构建失败提示“Unknown architecture” | config.yaml中列出了不支持的架构 | 仅使用以下架构:amd64、armv7、aarch64、armhf、i386 |
Supervisor API Endpoints
Supervisor API端点
bash
undefinedbash
undefinedAuthentication: Pass SUPERVISOR_TOKEN header
认证:传递SUPERVISOR_TOKEN请求头
Base URL: http://supervisor
基础URL: http://supervisor
GET /addons/self/info # Get current add-on details
POST /addons/self/restart # Restart this add-on
GET /addons/installed # List installed add-ons
GET /info # System information
POST /notifications/create # Send notification to user
GET /config/homeassistant # Read Home Assistant config
GET /addons/self/info # 获取当前插件详情
POST /addons/self/restart # 重启当前插件
GET /addons/installed # 列出已安装的插件
GET /info # 系统信息
POST /notifications/create # 向用户发送通知
GET /config/homeassistant # 读取Home Assistant配置
Example with bashio
使用bashio的示例
bashio::addon::self_info # Helper function for self info
undefinedbashio::addon::self_info # 获取自身信息的辅助函数
undefinedDependencies
依赖项
Required
必需依赖
| Package | Version | Purpose |
|---|---|---|
| Home Assistant | 2024.1+ | Add-on platform and supervisor |
| Docker | Latest | Container runtime |
| S6 Overlay | 3.x | Init system (included in base images) |
| 包 | 版本 | 用途 |
|---|---|---|
| Home Assistant | 2024.1+ | 插件平台和Supervisor |
| Docker | 最新版 | 容器运行时 |
| S6 Overlay | 3.x | 初始化系统(已包含在基础镜像中) |
Optional
可选依赖
| Package | Version | Purpose |
|---|---|---|
| bashio | Latest | Helper functions (included in base images) |
| python3 | 3.9+ | Python-based add-ons |
| nodejs | 18+ | Node.js-based add-ons |
| 包 | 版本 | 用途 |
|---|---|---|
| bashio | 最新版 | 辅助函数(已包含在基础镜像中) |
| python3 | 3.9+ | 基于Python的插件 |
| nodejs | 18+ | 基于Node.js的插件 |
Official Documentation
官方文档
Troubleshooting
故障排除
Add-on Won't Start
插件无法启动
Symptoms: Add-on shows as "Not running" or "Unknown"
Solution:
bash
undefined症状: 插件显示为“未运行”或“未知状态”
解决方案:
bash
undefinedCheck logs
查看日志
docker logs addon_name_latest # Or use HA UI: Settings > System > Logs
docker logs addon_name_latest # 或使用HA UI:设置 > 系统 > 日志
Common causes:
常见原因:
1. Invalid config.yaml syntax
1. config.yaml语法无效
2. Missing S6 service files
2. 缺少S6服务文件
3. Dockerfile can't find base image
3. Dockerfile无法找到基础镜像
4. Permission denied on rootfs files
4. rootfs文件权限被拒绝
undefinedundefinedSupervisor API Returns 401
Supervisor API返回401
Symptoms: API calls fail with "Unauthorized"
Solution:
bash
undefined症状: API调用失败并提示“Unauthorized”
解决方案:
bash
undefinedVerify SUPERVISOR_TOKEN is set
验证SUPERVISOR_TOKEN是否已设置
echo $SUPERVISOR_TOKEN
echo $SUPERVISOR_TOKEN
Check add-on logs for token errors
检查插件日志中的token错误
Token is automatically injected by Home Assistant
Token由Home Assistant自动注入
Verify permissions in config.yaml
验证config.yaml中的权限设置
If calling hassio endpoints, add: permissions: [hassio]
如果调用hassio端点,添加:permissions: [hassio]
undefinedundefinedConfiguration Not Saving
配置未保存
Symptoms: Options are lost after restart
Solution:
bash
undefined症状: 重启后选项丢失
解决方案:
bash
undefinedAlways save to /data/ or use bashio
始终保存到/data/或使用bashio
CONFIG_PATH="$(bashio::addon::config_path)" # Returns /data/
echo "my_value=123" > "${CONFIG_PATH}/settings.json"
CONFIG_PATH="$(bashio::addon::config_path)" # 返回/data/
echo "my_value=123" > "${CONFIG_PATH}/settings.json"
Verify /data/ exists and is writable
验证/data/是否存在且可写
ls -la /data/
undefinedls -la /data/
undefinedIngress Web UI Not Accessible
Ingress Web UI无法访问
Symptoms: Ingress URL returns 502 or blank page
Solution:
bash
undefined症状: Ingress URL返回502或空白页面
解决方案:
bash
undefined1. Verify service is listening on correct port
1. 验证服务是否在正确的端口上监听
netstat -tlnp | grep 8080
netstat -tlnp | grep 8080
2. Check reverse proxy headers in app config
2. 检查应用配置中的反向代理头
X-Forwarded-For, X-Forwarded-Proto must be set
必须设置X-Forwarded-For、X-Forwarded-Proto
3. Verify ingress settings in config.yaml
3. 验证config.yaml中的ingress设置
ingress: true
ingress_port: 8080
ingress_entry: /
undefinedingress: true
ingress_port: 8080
ingress_entry: /
undefinedBuild Fails with Architecture Error
构建失败提示架构错误
Symptoms: "Unknown architecture" or "Image not found"
Solution:
yaml
undefined症状: 提示“Unknown architecture”或“Image not found”
解决方案:
yaml
undefinedCheck config.yaml has valid arch values
检查config.yaml中的架构值是否有效
arch:
- amd64 # x86 64-bit
- armv7 # 32-bit ARM (Pi 2/3)
- aarch64 # 64-bit ARM (Pi 4+)
- armhf # 32-bit ARM (older devices)
- i386 # 32-bit x86 (rare)
arch:
- amd64 # x86 64位
- armv7 # 32位ARM(树莓派2/3)
- aarch64 # 64位ARM(树莓派4+)
- armhf # 32位ARM(旧设备)
- i386 # 32位x86(罕见)
Dockerfile must use {arch} placeholder
Dockerfile必须使用{arch}占位符
FROM ghcr.io/home-assistant/{arch}-base:latest
undefinedFROM ghcr.io/home-assistant/{arch}-base:latest
undefinedSetup Checklist
发布前检查清单
Before publishing your add-on, verify:
- config.yaml has valid YAML syntax (use online YAML validator)
- All listed architectures are supported (amd64, armv7, aarch64, armhf, i386)
- Dockerfile uses official Home Assistant base image
- S6 service files exist and are executable (chmod +x)
- All configuration options are documented in schema
- No hardcoded paths (use bashio helpers)
- Permissions field lists required supervisor API access
- Tested on at least amd64 and ARM architecture
- Logs use bashio::log functions
- Graceful shutdown on SIGTERM implemented
- /data/ used for all persistent data
- Ingress working if web UI is provided
- README includes installation and usage instructions
发布插件前,请验证:
- config.yaml具有有效的YAML语法(使用在线YAML验证工具)
- 所有列出的架构均受支持(amd64、armv7、aarch64、armhf、i386)
- Dockerfile使用官方Home Assistant基础镜像
- S6服务文件存在且具有可执行权限(chmod +x)
- 所有配置选项都在schema中记录
- 没有硬编码路径(使用bashio辅助工具)
- Permissions字段列出了所需的Supervisor API访问权限
- 至少在amd64和ARM架构上进行了测试
- 日志使用bashio::log函数
- 实现了SIGTERM信号的优雅关闭
- 所有持久化数据都存储在/data/中
- 如果提供Web UI,Ingress可正常工作
- README包含安装和使用说明
Creating a Repository
创建插件仓库
To publish multiple add-ons:
要发布多个插件:
1. Create Repository Structure
1. 创建仓库结构
bash
mkdir my-addon-repo
cd my-addon-repobash
mkdir my-addon-repo
cd my-addon-repo2. Create repository.yaml
2. 创建repository.yaml
yaml
---
name: My Add-On Repository
url: https://github.com/username/my-addon-repo
maintainer: Your Name <email@example.com>yaml
---
name: My Add-On Repository
url: https://github.com/username/my-addon-repo
maintainer: Your Name <email@example.com>3. Add Add-Ons
3. 添加插件
my-addon-repo/
├── repository.yaml
├── my-addon-1/
│ ├── config.yaml
│ ├── Dockerfile
│ └── rootfs/
└── my-addon-2/
├── config.yaml
├── Dockerfile
└── rootfs/my-addon-repo/
├── repository.yaml
├── my-addon-1/
│ ├── config.yaml
│ ├── Dockerfile
│ └── rootfs/
└── my-addon-2/
├── config.yaml
├── Dockerfile
└── rootfs/4. Push to GitHub
4. 推送到GitHub
Add the repository URL to Home Assistant to make add-ons discoverable.
将仓库URL添加到Home Assistant,使插件可被发现。
Advanced: Publishing to GitHub Container Registry
进阶:发布到GitHub Container Registry
For private repositories or multi-architecture builds:
bash
undefined对于私有仓库或多架构构建:
bash
undefinedBuild and push for all architectures
为所有架构构建并推送镜像
docker buildx build
--platform linux/amd64,linux/arm/v7,linux/arm64/v8
-t ghcr.io/username/my-addon:1.0.0
--push .
--platform linux/amd64,linux/arm/v7,linux/arm64/v8
-t ghcr.io/username/my-addon:1.0.0
--push .
undefineddocker buildx build
--platform linux/amd64,linux/arm/v7,linux/arm64/v8
-t ghcr.io/username/my-addon:1.0.0
--push .
--platform linux/amd64,linux/arm/v7,linux/arm64/v8
-t ghcr.io/username/my-addon:1.0.0
--push .
undefinedRelated Skills
相关技能
- - Docker fundamentals and best practices
docker-configs - - Related IoT device integration patterns
esphome-config-helper - - Home Assistant automation and scripting
home-assistant-automation
- - Docker基础和最佳实践
docker-configs - - 相关的IoT设备集成模式
esphome-config-helper - - Home Assistant自动化和脚本编写
home-assistant-automation