Не удается запустить веб-сокет Laravel в Docker

#laravel #docker #websocket

Вопрос:

Это мой первый раз, когда я работаю с докером. У меня есть сайт laravel websocket (php laravel postgresql), который нужно поместить в контейнер. Если я просто выполняю команды (без докера):

php ремесленник служит

веб-сайты php artisan: служите

тогда он успешно работает:

  • Панель управления веб-сайтами http://127.0.0.1:8000/laravel-websockets
  • Можно отправить почтовое сообщение на http://127.0.0.1:8000/telephonyCall для сервера websocket.
  • Клиент прослушивает сервер сокетов на порту 6001 и успешно принимает отправленные сообщения.

Я выполнил установку докера, следуя инструкции https://www.twilio.com/blog/get-started-docker-laravel с незначительными изменениями (добавлен порт 6001 в docker-compose.yml).

Теперь у меня есть в наличии контейнер:

  • Страница Apache по умолчанию http://192.168.1.61/
  • страница laravel по умолчанию http://192.168.1.61:8080/
  • Если я запускаю php artisan websockets: serve, я вижу в консоли, что сервер сокетов отвечает на клиентские подключения на порту 6001, но не отвечает на отправку сообщений.

Недоступный:

Пожалуйста, скажите мне, что я сделал не так?

Структура каталогов:

 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>
 

Докерфайл

 FROM php:8.0-apache

RUN apt update amp;amp; apt install -y zlib1g-dev g   libicu-dev zip libzip-dev zip libpq-dev 
    amp;amp; docker-php-ext-install intl opcache pdo pgsql pdo_pgsql 
    amp;amp; pecl install apcu 
    amp;amp; docker-php-ext-enable apcu 
    amp;amp; docker-php-ext-configure zip 
    amp;amp; 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
 

Ответ №1:

Если вы выполните команду

 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