Docker部署分离PHP/PHPMyAdmin镜像,如何通过localhost/phpmyadmin访问?
解决方法
你的Apache配置存在两个关键问题:ServerName不能包含路径,且反向代理的目标地址配置有误。以下是正确的配置步骤:
1. 启用Apache必要模块
确保Apache已启用代理相关模块,执行以下命令:
a2enmod proxy proxy_http rewrite
2. 修改Apache配置
情况1:Apache是宿主机服务(非Docker容器)
如果你的Apache运行在宿主机上,将反向代理目标指向宿主机的8080端口:
<VirtualHost *:80> ServerName localhost # 配置phpMyAdmin反向代理 ProxyPass /phpmyadmin http://localhost:8080/ ProxyPassReverse /phpmyadmin http://localhost:8080/ # 保留原有指向PHP服务的配置(比如DocumentRoot等) </VirtualHost>
情况2:Apache是Docker容器(和其他服务在同一Compose网络)
如果Apache包含在你的php服务中(即PHP服务基于Apache镜像),直接通过Docker服务名访问phpmyadmin容器:
<VirtualHost *:80> ServerName localhost # 配置phpMyAdmin反向代理 ProxyPass /phpmyadmin http://phpmyadmin:80/ ProxyPassReverse /phpmyadmin http://phpmyadmin:80/ # 原有PHP服务的配置 </VirtualHost>
也可以不用修改VirtualHost,直接在Apache全局配置中添加Location规则:
<Location "/phpmyadmin"> ProxyPass http://phpmyadmin:80/ ProxyPassReverse http://phpmyadmin:80/ </Location>
3. 重启Apache服务
配置修改后,重启Apache使生效:
systemctl restart apache2
关键说明
ServerName仅能设置主机名/域名,不能包含/phpmyadmin这类路径,这是你之前配置失效的核心原因之一。- 反向代理路径末尾的
/必须保留,避免phpMyAdmin内部路径跳转出现错误。 - 如果Apache和phpmyadmin不在同一网络(比如Apache在宿主机),必须使用宿主机的
localhost:8080作为目标地址;若在同一Docker网络,直接使用服务名phpmyadmin即可访问容器的80端口。
内容的提问来源于stack exchange,提问作者Ralph
相关产品推荐
相关产品推荐

