VSCode运行Laravel项目:基于Sail的Docker容器化开发流
LaravelSail与VSCodeDevContainer组合需正确配置.devcontainer.json的dockerComposeFile和service字段,启动DockerDesktop并切Linux模式,挂载路径准确,.env中数据库主机名写容器服务名(如mysql),重启容器生效。常见问题包括容器连不上、命令找不到、数据库拒绝访问,需确保容器
Lara vel Sail + VSCode Dev Container 堪称本地开发最省心、最一致的组合,前提是得把 .devcontainer.json 里的dockerComposeFile和service字段配对,Docker Desktop 要启动并切到 Linux 模式,挂载路径得准确,.env 里数据库主机名必须写容器服务名(比如mysql),然后重启容器才能生效。

直说了吧:用 Lara vel Sail + VSCode Dev Container,是目前本地开发中最省心、最一致的方案。但前提是——别跳过 .devcontainer.json 里的关键字段修改,也别漏掉容器内路径映射。否则,你可能会在连不上容器、找不到命令、数据库拒绝访问这些坑里反复打转。
为什么 sail up 后 VSCode 还连不上容器?
很多人在点击 Remote-Containers: Reopen in Container 后卡在“Building image”或直接报错 Cannot connect to the Docker daemon。这种情况通常绕不开下面几个点:
- 宿主机上的 Docker Desktop 必须已经启动,并且设为 Linux 容器模式(Windows 和 macOS 都别忘了检查这一项)。
.devcontainer/devcontainer.json中的"dockerComposeFile"路径必须指向项目根目录下的docker-compose.yml,千万别写成相对路径./docker-compose.yml或绝对路径——那会直接让 VSCode 找不着北。- 如果项目自定义了 Sail 配置(比如改动了
docker-compose.override.yml),devcontainer.json里的"service"字段必须和 compose 文件里的服务名完全一致。默认情况下是"lara vel.test",而不是你以为的app。 - 首次构建时,网络波动可能导致镜像拉取失败。稳妥的做法是手动运行一遍
./vendor/bin/sail build --no-cache,先把镜像预热好。
artisan 命令在集成终端里提示“command not found”?
这大概是大多数人最容易忽略的路径陷阱。VSCode 默认终端启动的是宿主机 shell,根本不是容器内的环境。所以:
- 一定要先通过
Remote-Containers: Reopen in Container进入容器,然后才打开终端。确认左下角状态栏显示的是Dev Container: lara vel.test,这才表示你已经在容器里了。 - 不要站在宿主机终端里试图执行
./vendor/bin/sail artisan。进到容器后,直接用php artisan或者artisan就行(Sail 会自动帮你 alias 好)。 - 如果还是报错,检查一下
/var/www/html是否真的挂载了你的项目代码。devcontainer.json里的"mounts"字段必须包含"source=${localWorkspaceFolder},target=/var/www/html,type=bind,consistency=cached",缺了它代码根本进不去容器。 - PHP 扩展缺失也会导致
artisan启动失败,比如pdo_pgsql。可以在容器内运行php -m | grep pgsql来验证扩展是否存在。
数据库连接失败:明明 sail ps 显示 mysql 在运行?
错误信息通常是 SQLSTATE[HY000] [2002] Connection refused 或 Connection timed out。根本原因很简单——Lara vel 应用连错了容器网络的地址。常见坑如下:
.env里的DB_HOST必须填容器服务名,比如mysql,而不是127.0.0.1或localhost。Sail 默认的 MySQL 服务名就是mysql,所以直接写DB_HOST=mysql就行。- PostgreSQL 用户容易踩的坑:
DB_PORT在容器内是5432,但DB_HOST仍然要写postgres(Sail 的 compose 模板里服务名是postgres,不是postgresql)。 - Redis 同理:
REDIS_HOST=redis,别写成127.0.0.1;而且REDIS_PASSWORD默认是空字符串,不是null也不是未设置。 - 改完
.env后必须重启容器:./vendor/bin/sail down && ./vendor/bin/sail up -d。Lara vel 不会自动重读环境变量,别指望改完就能直接生效。
其实真正麻烦的从来不是启动命令本身,而是容器内外的路径、网络、权限三者错位时,错误信息往往不指向真实原因。比如 artisan migrate 失败,可能是 .env 写错了 DB_HOST,也可能是 storage/ 目录权限在容器内不对(这时候要进容器执行 chown -R www-data:www-data /var/www/html/storage),还可能是 MySQL 容器还没完全初始化好就急着连。这些都得靠 ./vendor/bin/sail logs mysql 和 ./vendor/bin/sail exec lara vel.test bash 一层层去验证,没法靠猜。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















