在用Dockerfile制作镜像时,如果脚本文件是在Windows下写好的,放到linux下报这个错误,往往是因为编码格式的问题。
- .sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本
- 因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。
- 查看文件格式vi test.sh
:set ff
结果是
fileformat=dos - 修改文件格式format为unix
vi test.sh
:set ff=unix
或者
:set fileformat=unix
保存退出即可
也可直接在Dockerfile中安装dos2unix,对文件进行转换
RUN dos2unix /docker-startup.sh
dos2unix 命令安装
-bash: dos2unix: command not found
#CentOS/RHEL 安装
yum install -y dos2unix
#Debian/Ubuntu 安装
sudo apt-get install tofrodos
#实际上它安装了两个工具:todos(相当于unix2dos),和fromdos(相当于dos2unix)
todos Hello.txt (即 unix2dos Hello.txt)
fromdos Hello.txt (即 dos2unix Hello.txt)
--------------------------------