【问题标题】:How to use php artisan serve inside docker container?如何在 docker 容器中使用 php artisan serve?
【发布时间】:2018-09-17 14:07:46
【问题描述】:

我使用 dockerfile 创建了一个 php-composer 映像:

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 在 docker 容器中启动一个 laravel 应用程序?

或者我必须使用 nginx 或 apache 来运行它?

【问题讨论】:

  • 应该使用 nginx 或 Apache,因为 php artisan serve 服务器不用于生产环境,您的开发环境应尽可能接近生产环境。

标签: laravel docker


【解决方案1】:

可以这样做:

$ 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

【讨论】:

    【解决方案2】:

    您可以使用两个命令来调试问题:

    1. 在主机上运行这个来检查端口映射是否正确: docker port MyTest

    2. 在主机上运行此命令以检查容器内部的输出: docker exec MyTest curl 127.0.0.0:8000 你应该会看到 Laravel 应用程序的原始 HTTP 响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-29
      • 2018-10-31
      • 2018-09-05
      • 2023-03-11
      • 2018-02-22
      • 2020-12-14
      • 2016-03-09
      • 2021-06-22
      相关资源
      最近更新 更多