Ubuntu Docker容器内执行cd等命令报错找不到文件或目录如何解决
问题原因
报错信息中的\r是Windows操作系统特有的回车字符,Windows默认使用\r\n作为换行符,而Linux/Unix系统仅使用\n作为换行符。该报错的核心原因是你输入的路径/命令末尾被额外附加了\r字符,被Linux系统识别为文件名的一部分,因此无法匹配到对应路径,通常有两种触发场景:
- 启动容器时仅使用了
-i(交互式)参数,未添加-t(分配伪终端)参数,导致宿主机的终端换行符没有被正确转换,输入的命令末尾自动携带了\r字符 - 执行的命令/脚本是在Windows环境下编写保存的,默认携带了Windows格式的换行符,放到Linux容器内运行时无法被正确解析
解决方法
容器启动参数问题
重新启动容器,添加-t参数分配伪终端,自动完成换行符转换即可:
docker container run -it ubuntu
如果需要保留原有容器,也可以临时清理命令中的回车字符后执行,例如执行cd命令时可写作:
cd $(echo bin | tr -d '\r')
命令/脚本存在Windows换行符
如果是本地编写的脚本传入容器执行,可以在宿主机提前转换换行符:
- Windows环境可以用Notepad++打开文件,选择「编辑-文档格式转换-转换为Unix(LF)」后保存
- Linux/macOS环境可以直接用
dos2unix工具转换:dos2unix 你的脚本文件名.sh
如果已经进入容器,可以先安装dos2unix工具后再转换文件格式:
apt update && apt install -y dos2unix dos2unix 你的脚本文件名.sh
内容的提问来源于stack exchange,提问作者muhsen97
相关产品推荐
相关产品推荐

