Docker构建镜像运行容器脚本出现换行符问题的解决

 更新时间:2025年04月03日 09:08:51   作者:岫珩  
当使用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构建镜像换行符问题解决的资料请关注脚本之家其它相关文章!

相关文章

  • docker-compose管理容器network与ip问题

    docker-compose管理容器network与ip问题

    这篇文章主要介绍了docker-compose管理容器network与ip问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Docker容器下运行Nginx并实现反向代理

    Docker容器下运行Nginx并实现反向代理

    这篇文章介绍了Docker容器下运行Nginx并实现反向代理的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • docker image删不掉的解决办法

    docker image删不掉的解决办法

    在使用Docker的时候遇到删不掉image的情况,怎么回事,如何解决呢?下面小编给大家分享下docker image删不掉的解决办法,需要的朋友参考下吧
    2017-01-01
  • docker创建centos容器并在容器里下载MySQL本地连接MySQL

    docker创建centos容器并在容器里下载MySQL本地连接MySQL

    这篇文章主要介绍了docker创建centos容器并在容器里下载MySQL本地连接MySQL,文章内容介绍详细需要的小伙伴可以参考一下
    2022-03-03
  • Docker端口暴露的几种方式

    Docker端口暴露的几种方式

    主要介绍了Docker端口暴露的几种方式,包括-p(--publish)、-P(--publish-all)和EXPOSE,具有一定的参考价值,感兴趣的可以了解一下
    2025-12-12
  • Docker网络模型以及容器通信详解续篇

    Docker网络模型以及容器通信详解续篇

    这篇文章主要介绍了Docker网络模型以及容器通信详解续篇的相关资料,通过学习Docker网路驱动模型,更好地解决容器间的通信问题,需要的朋友可以参考下
    2022-11-11
  • Docker部署Redis缓存服务的实现步骤

    Docker部署Redis缓存服务的实现步骤

    本文介绍了使用Docker部署Redis缓存服务的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • docker多容器操作与强制删除容器的方法步骤

    docker多容器操作与强制删除容器的方法步骤

    有时候我们会有很多已经停止的容器或者由于错误强制退出不能用的容器,那我们就需要删除了,下面这篇文章主要给大家介绍了关于docker多容器操作与强制删除容器的方法步骤,需要的朋友可以参考下
    2022-11-11
  • Docker常用命令与小技巧汇总

    Docker常用命令与小技巧汇总

    这篇文章主要给大家介绍了关于Docker常用命令与小技巧的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • Visual Studio发布 Docker 镜像的实现步骤

    Visual Studio发布 Docker 镜像的实现步骤

    本文详细指导如何在Visual Studio中为ASP.NET Core WebAPI项目集成Docker支持,包括配置步骤、编写Dockerfile、测试代码、launchSettings.json配置及docker-compose.yml编写,感兴趣的可以了解一下
    2026-04-04

最新评论