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

使用Docker host网络模式时无法从宿主机访问容器内Laravel开发服务

问题根因

  • Docker Desktop(Mac/Windows版本)不原生支持network_mode: host:该模式仅在Linux原生Docker环境下可直通宿主机网络栈,Mac/Windows平台的Docker运行在虚拟化Linux内核中,host模式只会绑定到虚拟化层的网络,不会暴露到宿主机本地网络。
  • 默认php artisan serve仅监听容器内的127.0.0.1回环地址,即使添加--host 0.0.0.0参数,也会因为host模式在非Linux平台不生效,导致端口无法被宿主机访问。

解决方案

方案1:改用端口映射(推荐,全平台兼容)

该方案适配Mac/Windows/Linux所有Docker运行环境,不需要依赖host模式:

  1. 修改docker-compose.yml配置,删除所有服务的network_mode: host配置,给web服务添加端口映射规则:
version: '3'
services:
  setup:
    image: mariadb:latest
    command:
      - mysql -u root -proot -e "CREATE DATABASE central;"
  web:
    image: waryor/laravel-8.0:latest
    volumes:
      - '..:/var/www/html'
    depends_on:
            - mariadb
            - redis
    stdin_open: true
    tty: true
    # 新增端口映射
    ports:
      - "8000:8000"
  mariadb:
    image: mariadb:latest
    environment:
        MYSQL_ROOT_PASSWORD: 'root'
        MYSQL_DATABASE: 'central'
        MYSQL_USER: 'root'
        MYSQL_PASSWORD: 'root'
    restart: always
    # 可以按需添加端口映射供宿主机访问数据库
    # ports:
    #   - "3306:3306"
  redis:
    image: arm64v8/redis:alpine
    restart: always
    healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            retries: 3
            timeout: 5s
  1. 进入容器启动Laravel服务时指定监听0.0.0.0:
    php artisan serve --host 0.0.0.0
  2. 宿主机直接访问http://localhost.com:8000即可正常访问。

方案2:Linux宿主机保留host模式的修正方法

如果你使用Linux作为宿主机,network_mode: host可正常生效,只需执行以下操作即可:
启动Laravel服务时添加--host 0.0.0.0参数:
php artisan serve --host 0.0.0.0
启动后直接在宿主机访问http://localhost.com:8000即可。

额外排查步骤

配置完成后可在宿主机执行netstat -an | grep 8000或lsof -i :8000确认8000端口处于监听状态,排除端口被其他进程占用的问题。

内容的提问来源于stack exchange,提问作者Felix D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:15:03