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

Docker Compose配置Apache httpd为whoami反向代理遇无日志退出问题求解

问题描述

尝试搭建包含Apache httpd和whoami容器的Docker Compose环境,将httpd作为反向代理路由请求到whoami容器。现有配置如下:

docker-compose.yml

version: '3'

services:
  httpd:
    image: httpd:latest
    ports:
      - "80:80"
    volumes:
      - ./httpd.conf:/usr/local/apache2/conf/httpd.conf:ro

  whoami:
    image: containous/whoami
    ports:
      - "8080:80"

httpd.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

ServerName 127.0.0.1
Listen *:80

<Proxy balancer://whoami>
    BalancerMember http://whoami-replica-1:80
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass / balancer://whoami
ProxyPassReverse / balancer://whoami

运行docker-compose up后,可通过http://localhost:8080访问whoami,但访问http://localhost时httpd无日志直接退出,需排查配置错误并给出正确配置方案。


错误分析与修正方案

核心错误点

  1. 反向代理目标地址错误:Docker Compose默认会为服务创建内部网络,服务间通过服务名称访问。配置中BalancerMember写的是http://whoami-replica-1:80,但docker-compose.yml里的服务名是whoami,httpd启动时无法解析这个不存在的主机名,导致启动失败直接退出。
  2. 冗余的负载均衡配置:当前仅部署了一个whoami实例,无需使用balancer负载均衡模块,直接代理到单个服务即可简化配置。

修正后的配置

方案1:简化直接代理(推荐,单实例场景)

修改httpd.conf如下:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

ServerName 127.0.0.1
Listen *:80

# 直接代理到whoami服务的内部地址
ProxyPass / http://whoami:80/
ProxyPassReverse / http://whoami:80/

方案2:保留负载均衡(若后续要扩展多实例)

如果需要后续扩展whoami多实例,需先调整docker-compose.yml为服务添加副本,同时修正httpd.conf的目标地址:

调整后的docker-compose.yml

version: '3'

services:
  httpd:
    image: httpd:latest
    ports:
      - "80:80"
    volumes:
      - ./httpd.conf:/usr/local/apache2/conf/httpd.conf:ro

  whoami-replica-1:
    image: containous/whoami

  whoami-replica-2:
    image: containous/whoami

修正后的httpd.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

ServerName 127.0.0.1
Listen *:80

<Proxy balancer://whoami>
    BalancerMember http://whoami-replica-1:80
    BalancerMember http://whoami-replica-2:80
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass / balancer://whoami/
ProxyPassReverse / balancer://whoami/

验证与启动步骤

  1. 修正配置文件后,先验证Apache配置语法是否正确:
    docker-compose run --rm httpd httpd -t
    
    输出Syntax OK则说明配置无误。
  2. 重新启动服务:
    docker-compose down && docker-compose up -d
    
  3. 访问http://localhost即可看到whoami的响应内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:20:37