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

本地Docker部署多Caddy/FrankenPHP应用访问异常求助

解决方案

原因分析

你遇到的ECONNREFUSED ::1:443错误,本质是应用内部生成的请求URL指向了默认的localhost:443,但当前部署架构下这个端口并未对应到目标应用的容器(你映射的是441/442),或者前端跨端口访问被拒绝。以下提供两种可行的修复方案:


方案一:调整单应用Caddy与Symfony配置(保留多端口映射)

1. 修改每个应用的Caddyfile

进入catalog/和admin/目录,修改各自的Caddyfile,明确监听端口并避免自动HTTPS冲突:

{
    auto_https off
}

# 容器内部监听80端口(对应宿主机8001/8002)
localhost:80 {
    root * /app/public
    encode gzip zstd
    frankenphp
    file_server
}

# 容器内部监听443端口(对应宿主机441/442)
localhost:443 {
    tls internal
    root * /app/public
    encode gzip zstd
    frankenphp
    file_server
}

2. 更新docker-compose.yaml的环境变量

为每个服务指定正确的APP_URL和信任代理,确保Symfony生成的URL匹配宿主机访问地址:

services:
  catalog:
    build: ./catalog
    ports:
      - "8001:80"
      - "441:443"
    environment:
      - APP_URL=http://localhost:8001
      - TRUSTED_PROXIES=*  # 开发环境宽松配置,生产环境需指定具体IP段

  admin:
    build: ./admin
    ports:
      - "8002:80"
      - "442:443"
    environment:
      - APP_URL=http://localhost:8002
      - TRUSTED_PROXIES=*

3. 重启服务

执行命令重新部署:

docker-compose down && docker-compose up -d --build

方案二:全局Caddy反向代理(推荐,更优雅)

用独立的Caddy服务统一处理两个应用的请求,通过域名区分访问,无需暴露多个端口。

1. 调整docker-compose.yaml

移除单个应用的端口映射,新增全局Caddy服务并配置共享网络:

services:
  catalog:
    build: ./catalog
    environment:
      - APP_URL=https://catalog.localhost
      - TRUSTED_PROXIES=*
    networks:
      - app-network

  admin:
    build: ./admin
    environment:
      - APP_URL=https://admin.localhost
      - TRUSTED_PROXIES=*
    networks:
      - app-network

  caddy:
    image: caddy:2-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  caddy_data:
  caddy_config:

2. 创建全局Caddyfile

在backend/目录下新建Caddyfile,配置反向代理规则:

{
    auto_https {
        domain catalog.localhost
        domain admin.localhost
    }
}

catalog.localhost {
    reverse_proxy catalog:80
}

admin.localhost {
    reverse_proxy admin:80
}

3. 配置宿主机hosts文件

编辑本地hosts文件(Windows为C:\Windows\System32\drivers\etc\hosts,Linux/macOS为/etc/hosts),添加域名映射:

127.0.0.1 catalog.localhost
127.0.0.1 admin.localhost

4. 重启服务

执行命令部署:

docker-compose down && docker-compose up -d --build

之后直接访问https://catalog.localhost和https://admin.localhost即可分别进入两个应用,Caddy会自动生成并管理本地HTTPS证书。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:23:28