我已经创建了下面的docker-composer yml文件来创建连接php到套接字服务器的环境。
services:
websocket-server:
build: .
command: php -S 127.0.0.1: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
我的Dockerfile看起来像
FROM php:8.0-apache
WORKDIR /var/www/html
RUN apt-get update -y && apt-get install -y telnet libmariadb-dev
RUN docker-php-ext-install mysqli sockets
在构建了Docker容器之后,两个容器都运行良好,在websocket-server中我得到了下面的日志
[Fri Feb 3 05:12:43 2023] PHP 8.0.27 Development Server (http://127.0.0.1:1000) started
现在我已经写了一个php代码来连接socket
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
if (socket_connect($socket, '127.0.0.1', 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);
在浏览器中运行后,我得到以下警告
Warning: socket_connect(): unable to connect [111]: Connection refused in /var/www/html/index.php on line 4
Unable to connect to server
我找不到解决办法。
1条答案
按热度按时间qij5mzcb1#
你需要连接两个container到同一个网络,forward端口只是连接container端口你的主机,它不会帮助你连接每个container,所以你的php container可以接触socket container。
读取文档:https://docs.docker.com/network/
我不确定这个示例是否有效,但您可以尝试一下:
即使你连接到同一个网络,你仍然需要改变你的代码: