如何解决Laravel Sail启动报start-container可执行文件未找到错误
问题根因
报错核心是配置存在三处不匹配问题,直接触发start-container可执行文件找不到的错误:
- 自定义Dockerfile未生效:
docker-compose.yml中laravel.test服务的构建上下文指定为./vendor/laravel/sail/runtimes/8.1,并未加载你在项目根目录编写的基于php:7.4-fpm的Dockerfile,且Sail官方8.1运行时默认使用PHP8.1版本,与你预期的7.4版本不匹配。 - 启动脚本缺失:
start-container是Laravel Sail预置的容器启动入口脚本,仅存在于Sail官方运行时镜像或正确配置的自定义镜像中。你自行编写的Dockerfile既没有拷贝该脚本,也没有配置对应执行权限与入口规则,即使被加载也会触发当前报错。 - 数据库连接配置错误:
.env中DB_HOST设置为db,但docker-compose.yml内定义的数据库服务名为mysql,即使容器启动成功也无法正常连接数据库。
修复方案
根据你是否需要使用PHP7.4版本,二选一执行即可:
方案1:使用Sail官方默认PHP8.1环境(推荐,无需自定义镜像)
如果你不需要强制使用PHP7.4,直接删除项目根目录下自行编写的Dockerfile,修正.env配置即可:
- 打开
.env文件,将DB_HOST=db修改为DB_HOST=mysql - 清理旧构建缓存,重新启动服务:
docker-compose down --rmi all docker-compose up -d
方案2:保留自定义PHP7.4镜像
如果你必须使用PHP7.4版本,按以下步骤修正配置:
- 修改
docker-compose.yml中laravel.test服务的构建配置,将构建上下文指向项目根目录,补全构建参数:
laravel.test: build: context: ./ dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' user: '${WWWUSER:-sail}' uid: '${WWWUID:-1000}' # 其余原有配置保持不变
- 补全自定义Dockerfile的缺失内容,在原有文件的
USER $user行之前追加以下配置:
# 安装Sail运行必需的系统依赖 RUN apt-get update && apt-get install -y \ supervisor \ nodejs \ npm # 拷贝Sail预置的启动脚本与配置文件 COPY ./vendor/laravel/sail/runtimes/8.1/start-container /usr/local/bin/start-container COPY ./vendor/laravel/sail/runtimes/8.1/supervisord.conf /etc/supervisor/supervisord.conf RUN chmod +x /usr/local/bin/start-container # 配置容器启动入口 ENTRYPOINT ["start-container"]
- 打开
.env文件,将DB_HOST=db修改为DB_HOST=mysql - 清理旧构建缓存,重新构建启动:
docker-compose down --rmi all docker-compose build --no-cache docker-compose up -d
验证结果
启动完成后执行docker-compose ps,所有服务状态显示为Up即为修复成功。
内容的提问来源于stack exchange,提问作者Amithash
相关产品推荐
相关产品推荐

