【问题标题】:Unable to connect to socket server running inside docker container无法连接到在 docker 容器内运行的套接字服务器
【发布时间】:2016-10-11 15:57:25
【问题描述】:

我有一个 docker compose 文件,它结合了 nginx 和 php,如下所示:

nginx:
  image: nginx
  ports:
    - "80:80"
    - "2443:2443"
  links:
    - phpfpm
  volumes:
    - ./nginx/anonymous.conf:/etc/nginx/conf.d/anonymous.conf
    - ./logs/nginx-error.log:/var/log/nginx/error.log
    - ./logs/nginx-access.log:/var/log/nginx/access.log
    - ./public:/usr/share/nginx/html

phpfpm:
  image: php:fpm
  expose:
   - "2443"
  volumes:
    - ./public:/usr/share/nginx/html

我可以在浏览器上看到我的网站,即index.php 页面,其中包含我已经创建的虚拟主机让我们说anonymous.com

现在在我的 phpfpm 容器中,我启动了一个基于 Ratchet 的套接字服务器,它正在侦听端口 2443

// bin/server.php
$webSocketServer = new WsServer(new Chat());
$server = IoServer::factory(
        new HttpServer($webSocketServer), 2443);
$server->run();

这就是我在 phpfpm 容器中运行我的服务器的方式

php /usr/share/nginx/html/bin/server.php 

我的理解是,因为我已经暴露了2443,并且我的ngnixphpfpm 容器是链接的。我可以通过转到telnet anonymous.com 2443 来连接到在phpfpm 容器上运行的套接字服务器

但它没有连接。这是输出

$ telnet anonymous.com 2443
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

请注意,以前当我将 nginx 和 php-fpm 都放在单个容器上时,一切正常。所以我确信PHP没有任何问题。只是我不知道如何从外部访问套接字服务器。

谢谢

更新 如果我使用我的phpfpm 容器 ip 并通过浏览器将它与端口 2443 一起使用,它工作正常。但问题是我不能依赖容器 ip 作为它的全部动态。

【问题讨论】:

    标签: php sockets nginx docker dockerfile


    【解决方案1】:

    我在使用基于 Ratchet 的套接字服务器时遇到了类似的问题(相同的输出)。我的只是一个 PHP 容器(= 没有 nginx/apache/...)。 这是因为给工厂的第三个参数:

    $server = IoServer::factory(
      new HttpServer($webSocketServer), 2443, '127.0.0.1'
    );
    

    删除127.0.0.1(然后使用默认的0.0.0.0 值)解决了这个问题。

    【讨论】:

    • 谢谢你;我在玩基本的 socket_* 函数,需要使用 0.0.0.0 的 socket_bind() 来让容器到容器的通信正常工作。
    【解决方案2】:

    您应该使用服务的名称作为主机名。所以要从nginx 连接到phpfpm 使用phpfpm:2443

    【讨论】:

    • 否,作为要连接的主机名。不要使用anonymous.com
    • 是的,这行得通。如果你解释你的答案会很棒,因为我仍然不清楚我错过了什么。谢谢
    猜你喜欢
    • 2017-06-02
    • 2022-01-16
    • 2019-10-19
    • 1970-01-01
    • 2020-09-28
    • 2021-11-10
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多