Docker构建镜像运行容器脚本出现换行符问题的解决
作者:岫珩
当使用Docker构建镜像运行容器脚本出现换行符问题,Error: context must be a directory: “/root/xxxx/.\r”,下面主要介绍了这一问题的相关解决方法,希望对大家有所帮助
场景复现
当我通过docker命令构建镜像和运行容器时都没问题
当我将docker命令整合到sh脚本文件中,执行sh脚本时出现如下就报错
Error: context must be a directory: "/root/xxxx/.\r"
截图
这个错误通常是由于脚本中的换行符格式问题导致的。原因分析和解决方案如下:
根本原因
错误信息中路径末尾的 \r
暴露了问题:你的脚本文件使用了 Windows 格式的换行符(CRLF),而 Linux 系统只能正确识别 Unix 格式的换行符(LF)。当脚本执行时,Docker 误将 \r
当作路径的一部分,导致无法识别上下文目录。
解决方案
方法 1:用 sed 命令清理 CR 字符
sed -i 's/\r$//' your_script.sh
执行该命令后,再执行脚本,报错解决
方法 2:手动修改换行符(通过 Vim)
用 Vim 打开脚本:
vi your_script.sh
执行以下命令强制转换为 Unix 格式:
:set ff=unix
保存退出:
:wq
方法 3:用 dos2unix 转换脚本格式
安装转换工具(如果未安装):
yum install dos2unix -y # CentOS apt-get install dos2unix -y # Ubuntu
转换脚本文件:
dos2unix your_script.sh
重新运行脚本:
sh your_script.sh
验证脚本格式
使用 cat -A
检查隐藏字符:
cat -A your_script.sh
正常情况:行尾显示 $
(LF)
问题情况:行尾显示 ^M$
(CRLF)
修正后的脚本示例
确保你的脚本内容如下(注意换行符):
#!/bin/shdocker build -t sb_back:20250327 .
总结
问题根源是脚本文件的换行符格式不兼容。通过将脚本转换为 Unix 格式(LF),Docker 就能正确识别构建上下文路径。推荐使用 dos2unix
工具一键修复。
以上就是Docker构建镜像运行容器脚本出现换行符问题的解决的详细内容,更多关于Docker构建镜像换行符问题解决的资料请关注脚本之家其它相关文章!