Skip to content

[codex] Fix Watchtower Docker API version for Docker 29#81

Draft
ZeroPointSix wants to merge 5 commits into
mainfrom
codex/fix-watchtower-docker-api-version
Draft

[codex] Fix Watchtower Docker API version for Docker 29#81
ZeroPointSix wants to merge 5 commits into
mainfrom
codex/fix-watchtower-docker-api-version

Conversation

@ZeroPointSix

Copy link
Copy Markdown
Owner

Summary

  • Set Watchtower's DOCKER_API_VERSION to 1.44 by default so it can connect to Docker Engine 29+, whose daemon rejects clients older than API v1.44.
  • Add WATCHTOWER_DOCKER_API_VERSION as an optional override in .env.example for operators who need to tune it.
  • Add a regression test covering the compose setting and documented env override.

Fixes #79

Tests

  • PYTHONPATH=.pytest_deps python3 -m unittest tests.test_version_update -v (51 tests passed in the sandbox while developing the fix)
  • GitHub compare check confirmed this PR changes only the Watchtower compose config, env example, and the new regression test.

Copy link
Copy Markdown
Owner Author

总体结论:这个 PR 是小范围配置兼容修复,目标明确,能解决 Docker Engine 29+ 下 Watchtower 默认 Docker API 版本过低的问题;未发现阻塞级问题。

关键发现:

  • 低:docker-compose.yml 给 Watchtower 设置 DOCKER_API_VERSION=${WATCHTOWER_DOCKER_API_VERSION:-1.44},同时 .env.example 记录可选覆盖项,配置和文档保持一致。
  • 低:新增 unittest 直接检查 compose 与 env 示例中的关键字符串,能防止后续误删该兼容配置。测试粒度适合这类配置回归。
  • 低:该修复只影响 Watchtower 连接宿主 Docker daemon 的客户端 API 版本,不会改变 app 服务、更新 token 或 watchtower HTTP API 开关的行为。

优先级建议:

  • 阻塞:无。
  • 中:合并前建议确认实际部署环境中 Watchtower 镜像/版本支持 DOCKER_API_VERSION 环境变量;这是 Docker client 的常见变量,但真实容器 smoke test 比字符串测试更有说服力。
  • 低:如果 CI 没有运行整个 unittest 套件,至少运行新增测试所在模块,确认文件名和发现路径没有遗漏。

后续建议:

  • 后续若继续遇到 Docker API 版本兼容问题,可以在运维文档里补一条“何时调整 WATCHTOWER_DOCKER_API_VERSION”的故障排查说明。

@ZeroPointSix

Copy link
Copy Markdown
Owner Author

CodeXWeb 本轮自动巡检已认领,正在处理本 PR 的 review 建议。

本轮只会处理这一项:#81

处理范围限定为 review comment 4670506235 中的合并前验证建议:核对 Watchtower DOCKER_API_VERSION 配置、相关测试和可行的容器/配置 smoke;不会自动合并。

@sonarqubecloud

Copy link
Copy Markdown

@ZeroPointSix

Copy link
Copy Markdown
Owner Author

CodeXWeb 本轮自动巡检处理结果:本轮只处理 PR #81,未切换到其他 Issue/PR,也不会自动合并。

已复核维护者评论 #81 (comment) 中关于 Watchtower Docker API 版本兼容性的建议。

依据:

  • Docker CLI 官方文档说明 DOCKER_API_VERSION 可覆盖协商得到的 API 版本:https://docs.docker.com/reference/cli/docker/
  • Docker Engine API 官方版本矩阵显示 Docker Engine 29.0/29.1/29.2 的最低 API 版本为 1.44:https://docs.docker.com/reference/api/engine/
  • PR 当前实现使用 DOCKER_API_VERSION=${WATCHTOWER_DOCKER_API_VERSION:-1.44},并在 .env.example 提供 WATCHTOWER_DOCKER_API_VERSION=1.44 覆盖项,方向与上述要求一致。

验证结果:

  • PASS: .venv/bin/python -m unittest tests.test_watchtower_docker_api_config -v -> 2 tests passed。
  • PASS: .venv/bin/python -m unittest tests.test_version_update -v -> 51 tests passed。
  • FULL: .venv/bin/python -m pytest -q(启动本地 Flask 测试服务后执行)-> 1524 passed, 7 skipped, 31 subtests passed, 5 failed, 669.49s。

完整 pytest 失败项:

  • tests/test_csrf_browser_recovery.py::CsrfBrowserRecoveryTests::test_browser_recovers_after_stale_csrf_token_and_retries_once:等待“导入完成” toast 超时;日志显示 stale CSRF 后第二次 /api/accounts 仍返回 400。
  • tests/test_pool_cf_real_e2e.py::RealCFWorkerE2ETests::test_01_claim_random_creates_real_cf_mailbox:CF Worker 创建邮箱返回 HTTP 400,上层为 500。
  • tests/test_pool_cf_real_e2e.py::RealCFWorkerE2ETests::test_02_claim_then_read_messages_empty:同一 CF Worker claim 前置失败。
  • tests/test_pool_cf_real_e2e.py::RealCFWorkerE2ETests::test_03_claim_complete_deletes_remote_mailbox:同一 CF Worker claim 前置失败。
  • tests/test_pool_cf_real_e2e.py::RealCFWorkerE2ETests::test_04_claim_complete_timeout_skips_delete:同一 CF Worker claim 前置失败。

限制:

  • 沙箱远程环境没有 docker / docker compose CLI,因此无法做真实 Watchtower 容器级 smoke;这一点已作为验证风险记录。
  • 从失败文件与错误类型看,完整 pytest 的 5 个失败未直接指向本 PR 的 Watchtower Docker API 配置变更,但仍需保留为当前验证风险。

留痕:

  • 已更新 WORKSPACE.md22d13ed
  • 本轮未修改 PR 的业务代码或 Docker 配置,只补充了 Workspace 记录。

@ZeroPointSix ZeroPointSix left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

总体结论:本轮增量审查覆盖 PR #81 当前 head 22d13edd86385b0e4f3bae18255e4254b5267d06。配置修复方向此前已被评论覆盖;本次新增发现是当前 Code Quality 仍失败,合并前需要先修正格式检查。

关键发现:

  • 阻塞:GitHub Actions Code Quality workflow 中 Code Linting job 失败,失败步骤是 Run Black (Code Formatter Check)。日志显示 tests/test_watchtower_docker_api_config.py 会被 Black 重新格式化,差异是 from pathlib import Pathimport unittest 之间多了一个空行;因此当前 head 无法通过代码质量门禁。
  • 影响:这不是 Watchtower Docker API 方案本身的问题,但会阻止 PR 以当前状态合并,也会让后续 reviewer 继续追踪同一个 CI 红灯。
  • 建议:在 PR 分支运行 black tests/test_watchtower_docker_api_config.py,提交格式化结果后重新触发 Code Quality。该改动应只影响测试文件格式,不需要改业务逻辑或 Docker 配置。

优先级建议:

  • 阻塞:先修复 Black 格式失败并确认 Code Quality 变绿。
  • 中:保留此前评论中的限制说明:当前沙箱没有 Docker/Compose,真实 Watchtower 容器级 smoke 仍需要在具备 Docker 的环境确认。
  • 低:如果继续保留完整 pytest 的既有失败说明,建议和 Code Quality 状态分开记录,避免把格式门禁失败误归因到外部 E2E。

后续建议:

  • 修复格式后,本 PR 的核心验证重点仍是:DOCKER_API_VERSION=${WATCHTOWER_DOCKER_API_VERSION:-1.44} 是否能在目标 Docker Engine 29.x 部署环境中让 Watchtower 稳定启动并暴露 HTTP API。

巡检审查标记:PR & Issue Reviewer 已审查当前 head commit 22d13edd86385b0e4f3bae18255e4254b5267d06;本轮只对 ZeroPointSix/outlookEmailPlus#81 写回增量审查意见。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: 无法连接 Watchtower (http://watchtower:8080) 容器自带版本过低且基本无法自动启动

1 participant