Windows11下Sylius预配置Docker项目启动失败:PHP路径报错
问题
在Windows11主机上运行预配置Docker的Sylius项目,本地执行composer install和yarn install均正常,但执行docker compose时出现启动失败报错,关键错误片段如下:
=> ERROR [myproject-php sylius_php_prod 19/21] RUN set -eux; mkdir -p var/cache var/log; composer dump-a 12.7s ------ > [myproject-php sylius_php_prod 19/21] RUN set -eux; mkdir -p var/cache var/log; composer dump-autoload --classmap-authoritative; APP_SECRET='' composer run-script post-install-cmd; chmod +x bin/console; sync; bin/console sylius:install:assets --no-interaction; bin/console sylius:theme:assets:install public --no-interaction: #0 12.64 + bin/console sylius:install:assets --no-interaction ': No such file or directory'php ------ failed to solve: executor failed running [...] : exit code: 127 `docker-compose` process finished with exit code 17
主机已手动创建var/cache和var/log目录,但容器仍无法启动,需要排查PHP路径相关报错的原因。
解决方案
这个报错的核心原因是Windows系统的CRLF换行符与Linux容器的LF换行符不兼容,具体修复步骤如下:
- 错误根源:项目中的
bin/console文件首行#!/usr/bin/env php使用了Windows的CRLF换行符(行尾带\r\n),在Linux容器内执行时,Shell会将#!/usr/bin/env php\r识别为完整的命令路径,导致找不到名为php\r的可执行文件,从而抛出路径不存在的错误。 - 修复操作:
- 修正
bin/console的换行符:- 在代码编辑器(如VS Code)中打开该文件,将右下角的换行符设置从
CRLF切换为LF,保存文件; - 或通过Git全局配置强制转换换行符:执行
git config core.autocrlf input,重新同步项目文件;
- 在代码编辑器(如VS Code)中打开该文件,将右下角的换行符设置从
- 清理Docker缓存后重新构建:
- 执行命令
docker compose build --no-cache myproject-php,避免复用之前缓存的错误文件;
- 执行命令
- 删除主机上手动创建的
var/cache和var/log目录:Dockerfile中已包含创建这两个目录的指令,主机创建的目录可能因权限或挂载冲突引发问题,由容器自行创建即可。
- 修正
内容的提问来源于stack exchange,提问作者miltone
相关产品推荐
相关产品推荐

