运行docker容器时报错 exec user process caused "no such file or directory"

现象

Docker镜像正常打包编译(docker build)之后,在Linux环境下启动(docker run)时报错,
错误日志为: standard_init_linux.go:228: exec user process caused: no such file or directory

原因

这是由于编码环境是Windows系统,而容器运行或镜像编译环境是Linux系统,换行格式不同造成的,
Windows系统的默认代码格式是dos,而Linux系统的默认代码格式是unix,如果使用dos格式进行代码编写,在编译为docker镜像之后,Docker的启动脚本(例如entry-point.sh)文本内容的每一行都会被自动添加上一个^W标识,造成解析错误。
所以在编译前我们需要把代码格式转换一下。

解决

可以在镜像编译前(原始代码中)修改文件格式,也可以在镜像编译后,通过命令行(bash)对镜像的启动脚本文件内容进行修改。

1.镜像编译前

可以使用代码编辑器(以VScode为例),修改文件格式。在打开文件时,软件右下角会有“选择行尾序列选项”,把CRLF(Windows)更改为LF(Linux)就好了。
如图:

2.镜像编译后

可以直接通过bash进入镜像文件目录,然后通过vi修改文件,把^W等字符删去即可。
也可以安装dos2unix,使用dos2unix命令把相关文件转换为unix格式。

$ yum install dos2unix
$ dos2unix run-lamp.sh
$ dos2unix Dockerfile
posted @   余以为  阅读(5520)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示