fix(honcho): 容器端口必须用容器内端口,不能用 host 映射端口

vm61 honcho-api 一直 unhealthy + deriver 反复重启,根因是 stack.yml 把
宿主机映射端口 (HONCHO_DB_PORT=25432) 当成了容器间互访端口:
- DB_CONNECTION_URI 里 database:${HONCHO_DB_PORT} 应为 database:5432
- healthcheck URL localhost:18000 应为 localhost:8000
HONCHO_API_PORT/DB_PORT/REDIS_PORT 仅用于宿主机 ports 映射段,
容器之间互访必须硬编码容器内端口 (5432/6379/8000)。

- 改 stack.yml api + deriver 段 DB_CONNECTION_URI 端口为 5432
- 改 stack.yml api 段 healthcheck URL 为 localhost:8000
- readme 关键陷阱加第 6 条:"容器端口 vs 宿主机端口不可混用"
- vm61 4 honcho 容器全部 healthy,deriver queue processor 已正常运行
This commit is contained in:
2026-06-19 18:39:17 +08:00
parent 80d485605b
commit c157e9a418
2 changed files with 17 additions and 3 deletions
+14
View File
@@ -253,6 +253,20 @@ Honcho 是 **AGPL-3.0**,对网络服务部署有"用户可获取源码"的要
honcho-self-hosted 相对官方 compose 的一个改进:**移除了**`trust` 认证(官方默认的 dev 用法),改用强密码 + scram-sha-256。生产环境务必保留这个设置。 honcho-self-hosted 相对官方 compose 的一个改进:**移除了**`trust` 认证(官方默认的 dev 用法),改用强密码 + scram-sha-256。生产环境务必保留这个设置。
### 6. 容器端口 vs 宿主机端口不可混用
**容器之间互访必须用容器内端口(5432/6379/8000**,不能用宿主机映射端口(如 `HONCHO_DB_PORT=25432`)。错误示例:
```yaml
# ❌ 错:${HONCHO_DB_PORT} 是宿主机端口 25432,容器内根本没监听这个
DB_CONNECTION_URI=postgresql+psycopg://honcho:pw@database:${HONCHO_DB_PORT}/honcho
# ✅ 对:硬编码容器内端口 5432
DB_CONNECTION_URI=postgresql+psycopg://honcho:pw@database:5432/honcho
```
同样 healthcheck 也用容器内端口 `localhost:8000`**不是** `localhost:18000`(宿主映射端口)。
## 故障排查 ## 故障排查
| 症状 | 排查命令 | | 症状 | 排查命令 |
+3 -3
View File
@@ -35,7 +35,7 @@ services:
- "${HONCHO_API_PORT:-8000}:8000" - "${HONCHO_API_PORT:-8000}:8000"
environment: environment:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
- DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:${HONCHO_DB_PORT}/${HONCHO_DB_NAME} - DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:5432/${HONCHO_DB_NAME}
- CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true - CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true
- CACHE_ENABLED=true - CACHE_ENABLED=true
- LOG_LEVEL=${HONCHO_LOG_LEVEL:-INFO} - LOG_LEVEL=${HONCHO_LOG_LEVEL:-INFO}
@@ -64,7 +64,7 @@ services:
- CMD - CMD
- /app/.venv/bin/python - /app/.venv/bin/python
- -c - -c
- "import urllib.request; urllib.request.urlopen('http://localhost:18000/health', timeout=2).read()" - "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2).read()"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 10 retries: 10
@@ -88,7 +88,7 @@ services:
condition: service_healthy condition: service_healthy
environment: environment:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
- DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:${HONCHO_DB_PORT}/${HONCHO_DB_NAME} - DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:5432/${HONCHO_DB_NAME}
- CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true - CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true
- CACHE_ENABLED=true - CACHE_ENABLED=true
- NAMESPACE=${HONCHO_NAMESPACE:-honcho} - NAMESPACE=${HONCHO_NAMESPACE:-honcho}