如何在docker容器中使用php artisan服务?

时间:2018-09-17 14:07:46

标签: laravel docker

我使用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服务来在docker容器中启动laravel应用程序?

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

2 个答案:

答案 0 :(得分:0)

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

  1. 在主机上运行此命令以检查端口映射是否正确: docker port MyTest

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

答案 1 :(得分:0)

可以这样做:

$ 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