Docker容器间连接失败:Alpine Nginx容器互通问题求助
解决Alpine容器间Nginx服务连接拒绝问题
核心问题:容器间通信端口错误
你在frontend容器内用http://dashboard:5001访问dashboard服务是错误的——5001是宿主机的端口映射,容器间通信需要使用容器内部的服务端口。
查看你的配置:
- dashboard容器的Nginx监听内部
80端口(Nginx配置里listen 80;) - docker-compose中的
5001:80只是将宿主机的5001端口转发到容器的80端口
所以正确的访问地址应该是:
$response = $http->get('http://dashboard:80');
额外排查步骤
如果修改端口后仍无法连接,按以下步骤验证:
1. 确认Nginx监听所有网卡
检查Nginx配置的listen指令,确保不是仅监听localhost:
# 正确写法(监听容器所有网卡的80端口) listen 80; # 或明确指定 listen 0.0.0.0:80;
如果写成listen localhost:80;,同网络的其他容器将无法访问该服务。
2. 检查Supervisor是否启动Nginx进程
你的容器用Supervisor管理进程,需确保supervisord.ini中配置了Nginx的启动命令,示例配置:
[program:nginx] command=/usr/sbin/nginx -g "daemon off;" autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:php-fpm] command=/usr/sbin/php-fpm8 -F autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0
进入dashboard容器执行supervisorctl status,确认nginx进程处于RUNNING状态。
3. 容器内直接测试连接
进入frontend容器执行命令验证连通性:
# 测试访问dashboard的80端口 curl http://dashboard:80 # 检查端口是否开放 nc -zv dashboard 80
总结
最直接的修复是将Guzzle请求的端口从5001改为80,同时确保Nginx在容器内正确监听所有网卡,且Supervisor正常启动了Nginx服务。
内容的提问来源于stack exchange,提问作者AdeMuchlis
相关产品推荐
相关产品推荐

