運行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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM