You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建集成Mercure/Vulcain的Caddy时遇多类错误求助

问题解决方案:基于dunglas/symfony-docker的Caddy+Mercure+PostgreSQL问题排查

1. 解决crypto/ecdh包不在GOROOT的错误

这个错误源于构建Caddy时使用的Go版本过低,crypto/ecdh是Go 1.20+新增的标准库包,而Mercure v0.15.2依赖该包。解决步骤:

  • 确保使用Caddy 2.7.2对应的builder镜像,比如caddy:2.7.2-builder-alpine,该镜像内置的Go版本满足要求。
  • 在构建Caddy的Dockerfile片段中,直接指定匹配的Caddy版本进行构建,避免依赖旧版Go环境。

2. 解决Mercure与Caddy的版本冲突问题

Mercure v0.15.2明确要求依赖Caddy v2.7.2及以上版本,指定Caddy v2.6.4必然导致版本不兼容。解决方法:

  • 统一版本匹配:在Caddy构建命令中指定Caddy v2.7.2,并搭配Mercure v0.15.2,示例构建代码:
RUN xcaddy build v2.7.2 \
    --with github.com/dunglas/mercure/caddy@v0.15.2 \
    --with github.com/dunglas/vulcain/caddy
  • 不要自行降低Caddy版本,严格遵循Mercure官方的版本依赖要求。

3. 解决PostgreSQL postgres角色不存在的错误

此前环境正常,更换Caddy版本后出现该问题,通常是数据卷残留或服务启动顺序问题:

  • 清理旧数据卷:PostgreSQL容器首次启动时会初始化默认角色,若旧数据卷残留自定义配置,会导致角色异常。执行以下命令重置数据卷:
docker-compose down -v
docker-compose up -d
  • 检查环境变量配置:确认docker-compose.yml中PostgreSQL服务的POSTGRES_USER配置,若设置为非postgres的值,需同步修改Symfony的DATABASE_URL中的用户信息;若需要默认的postgres角色,确保POSTGRES_USER=postgres。
  • 添加服务健康检查:确保应用服务在PostgreSQL完全初始化后再启动,避免连接时角色未创建完成。在docker-compose.yml中为PostgreSQL添加健康检查:
services:
  database:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: app
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5
  php:
    depends_on:
      database:
        condition: service_healthy

内容的提问来源于stack exchange,提问作者Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:52:06