Не могу получить доступ к сайту на Laravel, запущенному в Docker

Впервые работаю с докером, заворачиваю в него сайт на ларавеле (php + laravel + postgresql). И не получается получить к нему доступ. Делаю по инструкции https://www.twilio.com/blog/get-started-docker-laravel и всё нормально до момента "Once this is completed, navigate to http://localhost:8080/ which should display the default Laravel welcome page." У меня в браузере вместо этого "Unable to connect". При этом просто "http://localhost" успешно показывает дефолтную страницу апача.

Контейнеры нормально создаются и стартуют

sudo docker-compose up -d --build

sudo docker-compose exec php-apache /bin/bash

Я могу зайти в контейнер, стартовать ларавел и пересобрать базу

php artisan serve

php artisan migrate:refresh

Значит контейнер имеет доступ и к веб серверу в контейнере, и к внешнему серверу БД postgres (пока что на БД в контейнере не перенастраивал). А вот 8000 порт недоступен. Видимо проблема в портах, и я не понимаю, как её исправить. В итоге мне нужно получать доступ к этому веб серверу по 80, 8000 и 6001 порту (последний - веб сокеты).

Что мне нужно исправить?

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

docker 
  apache
    ¬ default.conf
  databases
  php
    ¬ Dockerfile
  src
    ¬ (тут копия рабочего сайта)
  ¬ docker-compose.yml

default.conf

<VirtualHost *:80>
   ServerName WebServer
   DocumentRoot /var/www/WebServer/public
   <Directory /var/www/WebServer>
       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/WebServer

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

docker-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'
        volumes:
            - ./src:/var/www/WebServer
            - ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
        depends_on:
            - database

UPDATE1: Я добавил порты,

 ports:
    - '8080:80'
    - '8000:8000'
    - '6001:6001'

теперь после запуска вебсокетов в консоли видно, что клиенты успешно подключаются. Но доступа к админке вебсокетов http://192.168.1.61:8080/laravel-websockets нет, и отправка POST сообщений http://192.168.1.61:8080/telephonyCall для сервера веб-сокета возвращает 404.


Ответы (2 шт):

Автор решения: Ostet

Если запустить команду

  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
→ Ссылка
Автор решения: Volodymyr Afanasiev

попробуйте sail - замечательная обертка докера для локальной разработки https://youtu.be/TbvJvbHErcA мой пример с myslq

→ Ссылка