You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Sail容器正常运行但无法通过浏览器访问0.0.0.0:8000

Laravel Sail 容器端口映射正常但宿主机无法访问应用

环境配置

项目使用 Laravel Sail 创建的 docker-compose.yml 配置如下:

services:
    app:
        build:
            context: ./vendor/laravel/sail/runtimes/8.2
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.2/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
            IGNITION_LOCAL_SITES_PATH: '${PWD}'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
    mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
        volumes:
            - 'sail-mysql:/var/lib/mysql'
            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
                - '-p${DB_PASSWORD}'
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sail-mysql:
        driver: local

问题现象

  • 已设置 APP_PORT=8000,宿主机访问 http://0.0.0.0:8000 或 http://127.0.0.1:8000 提示「This site can’t be reached」
  • docker container ls 显示容器运行正常,端口映射正确:
    CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                    PORTS                                                                                        NAMES
    663fc79a5338   sail-8.2/app             "start-container"        23 minutes ago   Up 23 minutes             0.0.0.0:5173->5173/tcp, :::5173->5173/tcp, 8000/tcp, 0.0.0.0:8000->80/tcp, :::8000->80/tcp   app_name-app-1
    7311792e085f   mysql/mysql-server:8.0   "/entrypoint.sh mysq…"   23 minutes ago   Up 23 minutes (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060-33061/tcp                                   app_name-mysql-1
    
  • 其他 Docker 项目可正常访问,已尝试更换端口、关闭防火墙、检查代理,均无效

排查细节

  • 宿主机执行 php artisan serve --host=0.0.0.0 可正常访问应用
  • 容器内执行 curl 0.0.0.0:80 能获取 Laravel 首页,宿主机执行 curl 0.0.0.0:8000 返回 curl: (56) Recv failure: Connection reset by peer
  • 容器日志显示 PHP 开发服务器仅绑定到 localhost:80:
    usermod: UID '0' already exists
    2024-01-05 22:33:56,718 INFO Set uid to user 0 succeeded
    2024-01-05 22:33:56,722 INFO supervisord started with pid 1
    2024-01-05 22:33:57,727 INFO spawned: 'php' with pid 10
    [Fri Jan  5 22:33:58 2024] PHP 8.2.10 Development Server (http://localhost:80) started
    2024-01-05 22:33:59,005 INFO success: php entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2024-01-05 22:43:16,632 INFO reaped unknown pid 27 (terminated by SIGKILL)
    2024-01-05 22:43:16,633 INFO reaped unknown pid 26 (terminated by SIGKILL)
    

解决方案

核心问题是容器内的 PHP 开发服务器仅绑定了 localhost,无法接收容器外部的请求,需修改绑定地址为 0.0.0.0:

方法1:临时修改 Sail 配置(易被 composer 更新覆盖)

找到 vendor/laravel/sail/runtimes/8.2/supervisord.conf 文件,将其中的命令行:

command=php -S localhost:80 -t public

修改为:

command=php -S 0.0.0.0:80 -t public

修改后重启容器:

sail restart

方法2:自定义 Dockerfile(持久化修改,推荐)

  1. 在项目根目录创建 Dockerfile:
    FROM sail-8.2/app
    
    COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
    
  2. 复制 vendor/laravel/sail/runtimes/8.2/supervisord.conf 到项目根目录,将其中的 localhost:80 改为 0.0.0.0:80
  3. 更新 docker-compose.yml 中 app 服务的 build 配置:
    app:
        build:
            context: .
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
    
  4. 重新构建并启动容器:
    sail build --no-cache
    sail up -d
    

修改完成后,宿主机即可通过 http://127.0.0.1:8000 正常访问 Laravel 应用。

内容的提问来源于stack exchange,提问作者Debuqer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:40:16