You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Laravel WebSocket服务运行异常问题求助

问题排查及修复方案

核心问题原因

  1. Apache未启用rewrite模块,且目录权限配置错误,导致Laravel除首页外的所有路由无法访问
  2. Laravel Websocket服务默认监听127.0.0.1,容器外部请求无法到达
  3. Laravel环境配置未适配Docker容器网络,导致数据库、站点路径等配置不匹配
  4. 缺失目录权限配置,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:09:01