Laravel 如何在docker容器中使用php artisan Service?

Laravel 如何在docker容器中使用php artisan Service?,laravel,docker,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 in

我使用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>
Laravel开发服务器已启动:
但当我在本地浏览器上访问127.0.0.1:3000时,我什么也得不到

那么,是否可以简单地运行php artisan serve在docker容器中启动一个laravel应用程序


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

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

  • 在主机上运行此操作以检查端口映射是否正确:
    
    docker端口测试
    

  • 在主机上运行此操作以检查容器内的输出:
    
    docker exec MyTest curl 127.0.0.0:8000
    
    您应该看到Laravel应用程序的原始HTTP响应


  • 可以这样做:

    $ 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
    
    $ 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)
    
    默认情况下,容器从
    网桥
    网络开始,在该网络中,主机可通过地址
    0.0.0
    访问

    启动Docker时,将自动创建默认网桥网络(也称为网桥),除非另有指定,否则新启动的容器将连接到该网络


    左右(仅限Linux):

    $ 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
    
    $ 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主机隔离

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