Как использовать php artisan serve внутри докера? - PullRequest
0 голосов
/ 17 сентября 2018

Я создаю образ php-composer, используя dockerfile:

FROM php:7

RUN apt-get update 
RUN apt-get install curl
RUN curl -sS https://getcomposer.org/installer -o composer-setup.php
RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer
RUN apt-get install -y git

И я запускаю следующие команды, чтобы создать контейнер и запустить приложение laravel.

docker run -p 127.0.0.1:3000:8000 --name MyTest -dt php-composer to create a container
docker cp laravelApp/ d4bbb5d36312:/usr/
docker exec -it MyTest bash
cd usr/laravelApp
php artisan serve

После этого контейнерный терминал покажет информацию об успехе:

Laravel development server started: <http://127.0.0.1:8000>

Но когда я получаю доступ к 127.0.0.1:3000 через локальный браузер, я ничего не получаю.

Так возможно ли, чтобы просто запустить php artisan serve, чтобы запустить приложение laravel внутри контейнера докера?

Или я должен использовать nginx или apache для его запуска?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Это можно сделать так:

$ docker container run -it --rm -v /host/path/laravel:/app -p 3000:8000 php bash
$ cd /app
$ php artisan serve --host 0.0.0.0

По умолчанию контейнеры запускаются в сети bridge, внутри которой хост доступен по адресу 0.0.0.0.

Когда вы запускаете Docker, автоматически создается мостовая сеть по умолчанию (также называемая мостом), и недавно запущенные контейнеры подключаются к ней, если не указано иное.

https://docs.docker.com/network/bridge

Или так (только Linux):

$ docker container run -it --rm --network host -v /host/path/laravel:/app php bash
$ cd /app
$ php artisan serve (or php artisan serve --port 3000)

Если вы используете сетевой драйвер хоста для контейнера, сетевой стек этого контейнера не изолирован от хоста Docker.

https://docs.docker.com/network/host

0 голосов
/ 21 сентября 2018

Вы можете отладить проблему с помощью двух команд:

  1. Запустите это на хост-компьютере, чтобы проверить правильность сопоставления портов: docker port MyTest

  2. Запустите это на хост-машине, чтобы проверить вывод из вашего контейнера: docker exec MyTest curl 127.0.0.0:8000 Вы должны увидеть необработанный HTTP-ответ вашего приложения Laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...