laravel - 无法在 Docker 中启动 Laravel Web 套接字
问题描述
这是我第一次与 docker 合作。我有一个需要放入容器的 laravel websocket 站点(php + laravel + postgresql)。如果我只是执行命令(没有 docker):
php工匠服务
php artisan websockets:服务
然后它成功运行:
- Websockets 仪表板http://127.0.0.1:8000/laravel-websockets
- 可以向websocket 服务器的http://127.0.0.1:8000/telephonyCall发送 POST 消息。
- 客户端在 6001 端口监听套接字服务器,并成功接受发送的消息。
我按照说明https://www.twilio.com/blog/get-started-docker-laravel进行了 docker 安装,并进行了细微更改(将 6001 端口添加到 docker-compose.yml)。
现在我在容器中可用:
- Apache 默认页面http://192.168.1.61/
- laravel 的默认页面http://192.168.1.61:8080/
- 如果我运行php artisan websockets: serve,我在控制台中看到套接字服务器响应端口 6001 上的客户端连接,但不响应发送消息。
不可用:
- websockets 仪表板http://192.168.1.61:8080/laravel-websockets
- 为 websocket 服务器发送 POST 消息http://192.168.1.61:8080/telephonyCall
请告诉我我做错了什么?
目录结构:
docker
apache
¬ default.conf
databases
php
¬ Dockerfile
src
¬ (here is a copy of the working site)
¬ docker-compose.yml
默认.conf
<VirtualHost *:80>
ServerName WebSocketServer
DocumentRoot /var/www/WebSocketServer/public
<Directory /var/www/WebSocketServer>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Dockerfile
FROM php:8.0-apache
RUN apt update && apt install -y zlib1g-dev g++ libicu-dev zip libzip-dev zip libpq-dev \
&& docker-php-ext-install intl opcache pdo pgsql pdo_pgsql \
&& pecl install apcu \
&& docker-php-ext-enable apcu \
&& docker-php-ext-configure zip \
&& docker-php-ext-install zip
WORKDIR /var/www/WebSocketServer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
码头工人-compose.yml
version: '3.8'
services:
database:
image: postgres
container_name: database
restart: unless-stopped
environment:
POSTGRES_PASSWORD: 1111111
POSTGRES_DB: websocket
volumes:
- ./postgres-data:/var/lib/postgresql/data
ports:
- '5432:5432'
php-apache:
container_name: php-apache
build:
context: ./php
ports:
- '8080:80'
- '8000:8000'
- '6001:6001'
volumes:
- ./src:/var/www/WebSocketServer
- ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
depends_on:
- database
解决方案
如果你运行命令
php artisan serve
然后它在本地主机上启动。如果
php artisan serve --host = 192.168.1.61
它将可以从外部访问(这里 192.168.1.61 是我们正在运行的机器的 IP 地址)。但是容器使用自己的网络和192.168.1.61,因为它在“网络外”,所以工匠无法启动。
要使页面http://192.168.1.61:8080/laravel-websockets可用,您需要像这样运行:
php artisan serve --host = 0.0.0.0
推荐阅读
- javascript - 切片后默认显示第一个选项 div
- azure-data-explorer - ADX Optimized Autoscale 快速放大而不是缩小?
- python - 如何在另一个定义的函数中使用来自不同 python 模块的函数?
- python - ValueError:检查模型目标时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小
- python - 是否可以将 python 配置为使用带空格的完整路径?
- xml - 如何在不替换原始值的情况下添加/删除到 xml 文件?
- c++ - 使用引用指向节点的指针的函数删除链表中的节点?
- python - 动态规划的硬币找零问题
- python - 人口列 sort_values
- node.js - 模型“wallet”的路径“_id”中值“me”的转换为 ObjectId 失败