執行docker容器時報錯 exec user process caused "no such file or directory"
阿新 • • 發佈:2021-12-17
現象
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