Docker构建镜像运行容器脚本出现换行符问题的解决
场景复现
当我通过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构建镜像换行符问题解决的资料请关注脚本之家其它相关文章!
相关文章
centos7搭建docker私人仓库的方法(kubernetes)
这篇文章主要介绍了centos7搭建docker私人仓库的方法(kubernetes),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-03-03
详细讲解Docker-Compose部署Kafka KRaft集群环境
这篇文章主要为大家介绍了Docker-Compose部署Kafka KRaft集群环境的全面详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-01-01


最新评论