1. 程式人生 > 其它 >執行docker容器時報錯 exec user process caused "no such file or directory"

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