Networking Docker-端口阻止侦听

Networking Docker-端口阻止侦听,networking,docker,phpstorm,xdebug,Networking,Docker,Phpstorm,Xdebug,我正在尝试在基于docker的设置上设置xdebug集成 我正在使用Docker for Mac 1.12.0-rc2-beta17和“本机”Docker机器 我有一个安装了xdebug的容器,它公开了端口9000并将其映射到端口9000: $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

我正在尝试在基于docker的设置上设置xdebug集成

  • 我正在使用Docker for Mac 1.12.0-rc2-beta17和“本机”Docker机器
  • 我有一个安装了xdebug的容器,它公开了端口9000并将其映射到端口9000:

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                      NAMES
    6950c2a2b05d        app        "/usr/bin/supervisord"   9 minutes ago       Up 9 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:2222->22/tcp   app_1
    
  • 当我尝试使用PhpStorm侦听端口9000以进行调试连接时,我收到一个错误“无法侦听:端口9000正忙”


我必须明确指出我是网络新手。

首先检查您的容器日志以进行调试:

docker logs 6950c2a2b05d

为类
尾部行为添加
-f
标志:

docker logs -f app_1

首先检查要调试的容器日志:

docker logs 6950c2a2b05d

为类
尾部行为添加
-f
标志:

docker logs -f app_1

它取决于您希望通过Xdebug进行连接的方式

xdebug.remote\u connect\u back=1
表示PHP将等待一个带有GET参数的HTTP请求
xdebug\u SESSION\u START=
。然后,服务器中的PHP将尝试通过PHPStorm所在的端口9000连接回来。别打电话给我们,我们会打电话给你的情况

现在你和docker的情况很简单,你的集装箱负责港口9000。因此PHP将得到一个环回,PHPStorm无法使用端口9000,因为docker容器已经在使用它


因此,跳过将端口9000分配给docker,这将解决此情况

这取决于您希望通过Xdebug进行连接的方式

xdebug.remote\u connect\u back=1
表示PHP将等待一个带有GET参数的HTTP请求
xdebug\u SESSION\u START=
。然后,服务器中的PHP将尝试通过PHPStorm所在的端口9000连接回来。别打电话给我们,我们会打电话给你的情况

现在你和docker的情况很简单,你的集装箱负责港口9000。因此PHP将得到一个环回,PHPStorm无法使用端口9000,因为docker容器已经在使用它


因此,跳过将端口9000分配给docker,这将解决此情况

我发现了两件事:

  • 没有必要在带有xdebug的容器上公开端口9000(这对我来说似乎有点违反直觉,因为当时我并不完全理解IDE是如何连接到xdebug的)
  • 我能够使用中描述的解决方法使用xdebug

    • 我发现了两件事:

      • 没有必要在带有xdebug的容器上公开端口9000(这对我来说似乎有点违反直觉,因为当时我并不完全理解IDE是如何连接到xdebug的)
      • 我能够使用中描述的解决方法使用xdebug

      必须使用
      --expose
      选项绑定9000端口

      如果您使用的是docker compose示例docker-compose.yml文件如下:

      version: '2'
          services:
            your_app:
               ports:
               - "80:80"
               expose:
               - "9000"
               image: "your-image:tag"
      

      必须使用
      --expose
      选项绑定9000端口

      如果您使用的是docker compose示例docker-compose.yml文件如下:

      version: '2'
          services:
            your_app:
               ports:
               - "80:80"
               expose:
               - "9000"
               image: "your-image:tag"
      

      尝试执行
      sudo lsof-nP-iTCP-sTCP:LISTEN
      命令,查看哪个应用程序正在该TCP 9000端口上侦听。端口(或套接字,它是由ip地址:端口组成的端点)不是可抢占资源:最多只有一个进程可以访问它。启动的容器使用端口
      9000
      ,因此PhpStorm不能同时使用它。你能展示一下docker run命令吗?@LazyOne:下面是输出:
      命令PID用户FD类型设备大小/非节点名称com.dock 36299 repptilia 11u IPv4 0x7faf9785f44d7ab 0t0 TCP*:9000(听)
      @Auzias:我正在通过docker compose编排容器。有没有办法在不阻塞端口的情况下启动容器?首先--我自己不是Docker用户。。所以不能给你准确的答案。我只能看到一些程序/服务已经在本地侦听TCP 9000端口。从我在其他xdebug+docker问题中看到的情况来看——不应该是这样——本地端口应该是免费的。不知道如何将其配置为不这样做。。但这里有一个想法——尝试使用9001(或任何其他自由端口)——看看它是否工作得更好(xdebug和PhpStorm都可以轻松配置为使用另一个端口)。尝试执行
      sudo lsof-nP-iTCP-sTCP:LISTEN
      命令,看看哪个应用程序正在该TCP 9000端口上侦听。一个端口(或套接字,它是由ip_地址:port组成的端点)不是可抢占资源:最多只有一个进程可以访问它。启动的容器使用端口
      9000
      ,因此PhpStorm不能同时使用它。请显示
      docker run
      命令好吗?@LazyOne:以下是输出:
      命令PID用户FD类型设备大小/OFF NODE NAME com.docke 36299 repptilia 11u IPv4 0x7faf9785f44d7ab 0t0 TCP*:9000(侦听)
      @Auzias:我正在通过docker compose编排容器。有没有办法在不阻塞端口的情况下启动容器?首先——我自己不是docker用户。因此无法给出准确答案。我只能看到一些程序/服务已经在本地监听TCP 9000端口。从我在其他xdebug+dock中看到的情况来看er这里的问题——不应该是这样的——本地端口应该是免费的。我不知道如何配置它以避免这样做。但是这里有一个想法——尝试使用9001(或任何其他免费端口)——看看它是否工作得更好(xdebug和PhpStorm都可以很容易地配置为使用另一个端口)。你有什么建议吗?我删除该行docker-compose.yml中的“9000:9000”?如果我这样做,我就无法在PHPStorm中捕获断点。如果我只是使用“9000”“,docker分配一个随机端口,如果我出于同样的原因更改PHPStorm配置,我将无法连接到该端口。PHPStorm不连接到docker,相反,PHP将连接回您的主机,您的PHPStorm正在运行,并在PHP连接的端口9000上侦听。是的……我花了一点时间