Docker环境下Laravel WebSocket服务运行异常问题求助
问题排查及修复方案
核心问题原因
- Apache未启用rewrite模块,且目录权限配置错误,导致Laravel除首页外的所有路由无法访问
- Laravel Websocket服务默认监听127.0.0.1,容器外部请求无法到达
- Laravel环境配置未适配Docker容器网络,导致数据库、站点路径等配置不匹配
- 缺失目录权限配置,Laravel无法正常写入缓存、日志文件
分步修复操作
1. 修改Apache配置(default.conf)
修正Directory节点指向Laravel入口目录,补充权限规则:
<VirtualHost *:80> ServerName WebSocketServer DocumentRoot /var/www/WebSocketServer/public <Directory /var/www/WebSocketServer/public> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
2. 修改PHP镜像Dockerfile
启用Apache rewrite模块,补充Laravel目录权限配置:
FROM php:8.0-apache # 启用URL重写模块 RUN a2enmod rewrite 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 # 配置Laravel存储目录权限 RUN chown -R www-data:www-data /var/www/WebSocketServer/storage /var/www/WebSocketServer/bootstrap/cache RUN chmod -R 775 /var/www/WebSocketServer/storage /var/www/WebSocketServer/bootstrap/cache
3. 修改Laravel .env配置
适配Docker容器网络和站点地址:
# 站点地址改为宿主机映射地址 APP_URL=http://192.168.1.61:8080 # 数据库地址改为Docker Compose服务名 DB_HOST=database DB_DATABASE=websocket DB_PASSWORD=1111111 # Websocket服务监听所有网卡 LARAVEL_WEBSOCKETS_HOST=0.0.0.0 LARAVEL_WEBSOCKETS_PORT=6001
4. 配置Websocket服务常驻(可选但推荐)
在docker-compose.yml中新增独立的Websocket服务,避免手动执行命令退出后服务停止,修改后的完整services节点:
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:8' volumes: - ./src:/var/www/WebSocketServer - ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf depends_on: - database websockets: container_name: websockets build: context: ./php volumes: - ./src:/var/www/WebSocketServer command: php artisan websockets:serve --host=0.0.0.0 ports: - '6001:6001' depends_on: - database - php-apache
5. 重新构建启动容器
执行以下命令生效配置:
docker-compose down docker-compose build docker-compose up -d
验证效果
配置完成后可正常使用以下服务:
- Laravel Websockets控制面板:http://192.168.1.61:8080/laravel-websockets
- POST触发接口:http://192.168.1.61:8080/telephonyCall
- Socket服务连接地址:ws://192.168.1.61:6001
内容的提问来源于stack exchange,提问作者Ostet
相关产品推荐
相关产品推荐

