启动 Laravel-Sail 服务时遇到的 /usr/bin/env: 'bash\r' 错误

今天在使用 Laravel-Sail 构建完镜像后,使用 sail up 命令启动容器时,发现 sail-7.4/app 镜像构建的容器启动失败,运行日志显示发生了以下错误:

kkadmin.test_1  | /usr/bin/env: 'bash\r': No such file or directory

错误截图如下:

/usr/bin/env: 'bash\r': No such file or directory

经过查阅资料,找到了错误原因:

主要是 shell 文件第一行的约定语句的 bash 后面多了’\r’字符的原因,在 Linux 终端下,输出’\r’会什么都不显示,只是把光标移到行首,因此,终端虽然输出了”/usr/bin/env bash”,但是遇到’\r’后,光标会移到到行首,接着输出错误信息”No such file or directory”,最终,bash 脚本运行失败。

应该是无意间使用了 windows 编辑器更改了 shell 文件 start-container,解决办法:

在 Ubuntu 子系统中,进入项目目录,使用 vim 打开 docker/7.4/start-container 文件(如果你没有发布过 Dockerfile 文件,该文件位于:vendor/laravel/sail/runtimes/7.4/start-container),在 vim 界面中,按 Esc 键,键入以下命令:

:set ff

果然显示的格式为: fileformat=dos

将格式转为 unix 格式:

:set ff=unix

再次查看文件格式:

:set ff

现在显示文件格式为: fileformat=unix

保存文件:

:wq

然后删除构建好的 sail-7.4/app 镜像,重新构建镜像:

sail build --no-cache

构建完成后重新启动服务:

sail up

大功告成!

本作品采用《CC 协议》,转载必须注明作者和本文链接
顺势而为
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。