解決.sh檔案在Container內執行時的換行字元(CRLF/LF)問題

如果有在使用Docker並且是建置Linux環境的Image,搭配自行撰寫的shell檔案,有時候會因為版本控管、編輯器(IDE)等雜七雜八的因素,導致在Dockerfile中複製到Image的時候看起來雖然沒問題,但是在Run Container的時候出現因為換行字元(CRLF/LF)導致的錯誤時,除了可以回頭去調整或修改shell檔案,將換行字元從CRLF轉換成LF之外,還有一個更方便的方法,那就是在shell檔案複製到Docker Image的時候再執行轉換的動作。

起先我在寫Shell檔案的時候真的是碰到了許多次因為CRLF / LF換行字元的問題,早期都是回頭去修改原始檔案之後再重新Build Image,久了之後實在是覺得很麻煩,某天忽然想到直接在Dockerfile中安裝dos2unix這個套件,在shell檔案複製之後再執行它來將shell檔案的換行字元的問題解決,從此之後就沒有再為了Windows / Unix-like不同環境的換行字元問題而煩惱過了,因此特別用這篇文章簡短記錄一下,也許有人也為了這個問題困擇了一段時間呢!

Dockerfile內容參考範例

RUN apt-get install dos2unix;
COPY my-init.sh .
RUN dos2unix my-init.sh
CMD ["bash", "my-init.sh"]

發佈留言