本地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
相关产品推荐
相关产品推荐

