首页 > 解决方案 > 无法在 Docker 中启动 Laravel Web 套接字

问题描述

这是我第一次与 docker 合作。我有一个需要放入容器的 laravel websocket 站点(php + laravel + postgresql)。如果我只是执行命令(没有 docker):

php工匠服务

php artisan websockets:服务

然后它成功运行:

我按照说明https://www.twilio.com/blog/get-started-docker-laravel进行了 docker 安装,并进行了细微更改(将 6001 端口添加到 docker-compose.yml)。

现在我在容器中可用:

不可用:

请告诉我我做错了什么?

目录结构:

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

标签: laraveldockerwebsocket

解决方案


如果你运行命令

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

推荐阅读