我使用docker(使用nginx-docker-nginx-php-mysql)作为运行PHP应用程序的环境。 我正在尝试将websocket添加到我的应用程序,并且在配置Dockerfile和docker-compose.yml时遇到一些困难
我在cmd.php中有服务器文件(位置:docker-nginx-php-mysql \ www \ ratchet_chatapp \ cmd.php):
<?php
require 'vendor/autoload.php';
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use ChatApp\Chat;
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8090
);
$server->run();
我使用以下连接通过以下方法打开main.js上的Web套接字(位置:docker-nginx-php-mysql \ www \ ratchet_chatapp \ js \ main.js),
var conn = new WebSocket('ws://localhost:8090');
conn.onopen = function(e) {
console.log("Connection established!");
};
我的Dockerfile(位置:docker-nginx-php-mysql \ php \ Dockerfile):
FROM php:7.3-fpm
RUN apt-get update && apt-get install -y libzip-dev libpng-dev git zip unzip libgd3 libgd-tools libxml2 libxml2-dev mariadb-client && docker-php-ext-install pdo_mysql mysqli gd soap zip
我的docker-compose.yml(位置:docker-nginx-php-mysql):
version: "3"
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- ./www:/var/www/html
networks:
uln:
ipv4_address: 10.6.0.2
php:
build: ./php/
expose:
- 9000
- 8090
links:
- mysql
volumes:
- ./www:/var/www/html
networks:
uln:
ipv4_address: 10.6.0.3
app:
image: php:7.3-fpm
volumes:
- ./www:/var/www/html
command: "true"
mysql:
image: mysql:5.7
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: webprog
MYSQL_USER: webprog
MYSQL_PASSWORD: webprog
networks:
uln:
ipv4_address: 10.6.0.4
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
links:
- mysql
environment:
PMA_HOST: mysql
networks:
uln:
ipv4_address: 10.6.0.5
networks:
uln:
ipam:
config:
- subnet: 10.6.0.0/16
我尝试使用EXPOSE 8090配置Dockerfile并将其添加到yml,但仍然无法正常工作。 如何正确更改Dockerfile和yml?
谢谢!
答案 0 :(得分:0)
您的容器8090端口已映射到localhost上的9000端口,因此您应尝试指向localhost:9000来访问容器的websocket端口,即ws:// localhost:9000