laravel - 如何在 docker 容器中使用 php artisan serve?
问题描述
我使用 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 来运行它?
解决方案
可以这样做:
$ 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 主机隔离。
推荐阅读
- php - 查看 Laravel 5.6 中的未定义变量
- c++ - 如何在 c 或 c++ 中使用正则表达式从函数定义字符串中获取函数名称?
- html - 让 flex 具有与最宽元素相等宽度的列
- php - URI 必须是字符串或 laravel php 中的 UriInterface
- java - 在 MainActivity android studio 中将 java 类设置为对象时出错——无法解析符号“”
- java - NetBean 中的错误,但 javac 中没有错误?
- angular - 试图获取组件的服务属性。但总是以未定义的形式返回
- php - SMTP 错误:EHLO 命令失败:-ERR 未知命令
- f# - F# 函数很好,但从 main 调用时却不行
- python - Python + 多处理 + VMware:进程挂起