【问题标题】:PHP in Docker: Warning: socket_bind(): unable to bind address [98]: Address already in use in /var/www/html/websocket/server.php on line 28Docker 中的 PHP:警告:socket_bind():无法绑定地址 [98]:地址已在第 28 行的 /var/www/html/websocket/server.php 中使用
【发布时间】:2019-09-23 07:09:27
【问题描述】:

我使用的是 PHP7 的官方镜像,我的 docker start 命令:docker run -p 9000:9000 --name php -v $site_path:/var/www/html/ --privileged=true -d php:php72

$site_path是一个保存我的php代码的目录,然后我进入docker容器,使用php server.php然后得到上面的警告。

我也尝试在没有9000 端口的情况下运行脚本,例如9001,然后脚本工作,但我无法使用我的 JS 连接到服务器

我尝试在我的本地环境中使用php server.php(而不是在 docker 中),它成功了,JS 也成功连接了它。

【问题讨论】:

  • xdebug 自身不使用 9000。
  • 我尝试在代码中将命令修改为-p 9000:9000 -p 9001:9001并将端口更改为9001,警告又来了(当我在docker命令中没有绑定9001端口时,脚本可以运行)

标签: php docker php-7 php-socket


【解决方案1】:

您的端口 9000 和 9001 已被正在运行的容器或本地软件阻塞。

docker ps 显示所有正在运行的容器和它们阻塞的端口。如果不需要,请使用docker rm [-f] <name> 删除这些容器。如果在 Linux 上,您可以通过查看netstat -lnp 来检查端口 9000/9001 上本地运行的其他内容。也停止进程。

请注意,如果您想在主机上尝试新的目标端口,则无需更改容器中的端口。你也可以这样做:-p9002:9000,如果你想通过 localhost 上的端口 9002 访问服务。

【讨论】:

  • 这就是我想要做的:在容器中执行php server.php。并且如果我想和docker通信,我需要指定端口映射,所以我使用-p 9000:9000,但是如果我这样做是错误的,我尝试了你的建议,也失败了
  • 如果错误信息是address already in use,那么端口正在使用中。通过 docker 容器内部或外部的进程。您是否在一个容器中启动两台服务器?无论如何,您应该会看到 netstat -lnp 使用的所有端口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2014-08-04
  • 1970-01-01
  • 2014-07-10
  • 2019-07-25
  • 2012-05-30
  • 2013-04-02
相关资源
最近更新 更多