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

Docker环境下PHP连接Socket服务器报[111]连接被拒绝求助

问题解决:Docker容器间Socket连接被拒绝

核心原因

  1. 容器内localhost不指向其他容器:在php-tutorial容器中,127.0.0.1指的是容器自身,而非websocket-server容器,所以连接请求会被自身容器拒绝。
  2. PHP开发服务器监听范围受限:当前websocket-server的启动命令指定监听127.0.0.1,仅允许容器内部访问,其他容器无法连接。

具体修复步骤

1. 修改Docker Compose配置,让WebSocket服务器监听所有接口

更新docker-compose.yml中websocket-server的command字段,将监听地址改为0.0.0.0:

services:
  websocket-server:
    build: .
    command: php -S 0.0.0.0:1000 -t /var/www/html/websocket
    volumes:
      - ./src:/var/www/html
    ports:
      - 1000:1000
  
  php-tutorial:
    build: .
    volumes: 
      - ./src:/var/www/html
    ports:
      - 7000:80

2. 修改PHP连接代码,使用服务名访问WebSocket服务器

将PHP代码中的连接地址从127.0.0.1替换为Docker Compose服务名websocket-server:

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, 0);

if (socket_connect($socket, 'websocket-server', 1000) === false) {
    echo "Unable to connect to server\n";
    exit;
}

socket_write($socket, "Hello, server!");

$response = socket_read($socket, 1024);

echo "Response from server: $response\n";

socket_close($socket);

原理说明

  • Docker Compose默认会为所有服务创建一个共享网络,同一网络内的容器可以直接通过服务名称互相访问,无需依赖宿主机IP或localhost。
  • 将PHP开发服务器的监听地址改为0.0.0.0,允许来自容器外部(包括其他容器、宿主机)的连接请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:01:11