Ubuntu下Laradock部署Laravel后无法连接localhost求助
解决Laradock中php artisan serve无法访问localhost:8000的问题
问题场景
在Ubuntu系统安装Docker并为项目集成Laradock后,执行以下命令启动容器:
docker-compose up -d nginx mysql phpmyadmin workspace
所有容器创建成功后,进入workspace容器启动Laravel内置服务:
docker-compose exec workspace bash root@b3c88be3e389:/var/www# php artisan serve INFO Server running on [http://127.0.0.1:8000]. Press Ctrl+C to stop the server
但宿主机浏览器访问http://127.0.0.1:8000时,提示无法建立连接。查看容器端口映射,workspace容器已将宿主机8001端口映射到容器内8000端口。
解决方案
方法一:修改php artisan serve绑定地址(临时方案)
php artisan serve默认仅绑定容器内部的127.0.0.1,宿主机无法直接访问。启动时绑定容器所有IP即可:
# 在workspace容器内执行 php artisan serve --host=0.0.0.0
此时宿主机通过http://127.0.0.1:8001就能访问服务。
方法二:使用Laradock自带Nginx代理(推荐方案)
Laradock的设计初衷就是用Nginx作为Web服务器,无需启动Laravel内置服务,步骤如下:
- 配置Nginx站点文件
进入Laradock的nginx/sites目录,复制示例配置并修改:
编辑cp laradock/nginx/sites/default.conf.example laradock/nginx/sites/your-project.confyour-project.conf,调整root为容器内Laravel项目的public目录,server_name设为localhost或自定义域名:server { listen 80; listen [::]:80; server_name localhost; root /var/www/your-project/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_pass php-upstream; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } - 重启Nginx容器
docker-compose restart nginx - 访问服务
直接在浏览器访问http://localhost(或自定义域名)即可,无需启动Laravel内置服务。
问题原因
php artisan serve默认绑定容器内部回环地址127.0.0.1,该地址仅容器内部可访问,宿主机即使映射了端口也无法连接。- Laradock已预配置Nginx与PHP-FPM的联动,这是更符合开发/生产环境的标准用法,稳定性和实用性远超Laravel内置服务器。
内容的提问来源于stack exchange,提问作者DolDurma
相关产品推荐
相关产品推荐

