容器中sh脚本明明存在,为何会报"no such file or directory"的错误?
小伙伴碰到一起奇怪的事故,从gitlab上拉取的docker镜像项目,在本地开发机上进行docker build后,启动容器会报错如下:
exec /app/run.sh : no such file or directory
/app/run.sh文件是ENTRYPOINT启动的,注释掉ENTRYPOINT,直接进入容器后可以看到 /app/run.sh好好在那儿,文件的可执行权限也没有问题。那么问题在哪里?
其实这个问题很简单,但由于容器启动时的错误信息不全,产生了误导,让人误以为找不到sh脚本文件。
如果先启动容器,在容器内再手工执行 /app/run.sh,会看到报错信息略有不同。实际报错的是sh脚本的第一句:
#!/bin/bash
那么是因为容器内缺失 /bin/bash解释器吗?也不是,基础镜像没有问题,/bin/bash好好的存在。
最关键的是,同样的git项目拉取到的sh脚本和Dockerfile在另外一台开发机上进行镜像编译和运行是没有问题的。
仔细观察,发现sh脚本文件在不同的机器上,有一点点不同:换行符。
出问题的开发机上,脚本换行符是Windows换行符CRLF,所以这个脚本进入Docker容器中,第一行变成了:
#!/bin/bash【看不见的CRLF】
那执行脚本的时候,LF会被认为是Linux换行符,而解释器名称就成了”/bin/bashCR“,肯定找不到,所以就会报错"no such file or directory"。
这个报错的真实含义是”找不到脚本的解释器“,而不是找不到脚本本身。
那么为什么脚本文件的换行符被改变为CRLF呢,其实是git的core.autocrlf特性搞的鬼。参考 https://blog.upx8.com/3184
为了避免这种问题,有两个建议:
1,所有的开发机上,统一git的autocrlf设置,避免其为true。
2,VSCode上安装code-eol插件,显式的体现出每个文件的换行符,这样可以比较直观的察觉到问题。
容器中sh脚本明明存在,为何会报"no such file or directory"的错误?的更多相关文章
- sh脚本异常,binsh^M bad interpreter No such file or directory
错误 在Linux中执行.sh脚本,出现如下异常 /bin/sh^M: bad interpreter: No such file or directory 原因 在windows系统中编辑的.sh文 ...
- windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决 一.发现问题 由于tomcat内存溢出,在wind ...
- stop-hbase.sh出现stopping hbasecat:/tmp/hbase-root-master.pid:No such file or directory
stop-hbase.sh出现stopping hbasecat:/tmp/hbase-root-master.pid:No such file or directory解决办法:在hbase-env ...
- 执行脚本出现bin/bash: bad interpreter: No such file or directory
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory VI打开文件,没发现任何问题, 把/bin/bash ...
- 转载:执行脚本出现bin/bash: bad interpreter: No such file or directory
转载网址:http://blog.csdn.net/red10057/article/details/8051650 刚刚学习 SHELL 写了一个简单的例子 发生如下错误 -bash: ./test ...
- 在airflow的BashOperator中执行docker容器中的脚本容易忽略的问题
dag模板 from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow. ...
- 如何解决jenkins中shell脚本明明执行失败却不自行退出,且构建结果仍然显示success的问题??
首先,需要明确shell命令执行结果$?为0或者非0仅能代表此执行语句是否顺利执行了,例如: 执行语句:adb connect 192.168.XX.XX 执行结果:unable to connect ...
- 【转】执行脚本出现bin/bash: bad interpreter: No such file or directory
[转自]http://blog.csdn.net/wind19/article/details/4822666 错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以/r/n来标识, 其 ...
- ClouderaManager中Event Server报No such file or directory
错误日志如下: 2015-06-24 06:13:10,176 ERROR com.cloudera.cmf.eventcatcher.server.EventCatcherService: Erro ...
- Linux运行shell脚本提示No such file or directory错误的解决办法
Linux执行.sh文件,提示No such file or directory的问题: 原因:在windows中写好shell脚本测试正常,但是上传到 Linux 上以脚本方式运行命令时提示No s ...
随机推荐
- GitLab 无仓库 中了勒索病毒
坑爹的记录一下,并没有解决 Gitlab 昨天(2021-11-29)打开之后看不到项目了,下面这个吊样子 最后发现中病毒了,一堆的这个吊毛文件,复制一个打开看了一下 你别说这个黑客网页写的还不错,这 ...
- [kvm]创建虚拟机
创建虚拟机示例 # 使用iso创建虚拟机 virt-install --virt-type kvm --os-type=linux --name temp_debian11 \ --memory 16 ...
- 优化nginx参数(基本通用参数)
全局域配置参数 worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65530; 前两个参数用于开启nginx多 ...
- nlp入门(四)新闻分类实验
源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com) 数据来源: 搜狗新闻语料库 由于链接失效,现在使用百度网盘分享 链接:https://pan.baidu.com ...
- 《Redis核心技术与实战》学习笔记总结目录
1 Redis学习路径 去年我学习了极客时间的<Redis核心技术与实战>课程,在这门课程的学习中,我经常看到一位课代表的发言,他就是Kaito,他总结了一份Redis学习路径脑图(建议收 ...
- 用 ChatGPT 做一个 Chrome 扩展 | 京东云技术团队
用ChatGPT做了个Chrome Extension 最近科技圈儿最火的话题莫过于ChatGPT了. 最近又发布了GPT-4,发布会上的Demo着实吸睛. 笔记本上手画个网页原型,直接生成网页.网友 ...
- 慢SQL原因分析之索引失效
现象 最近收到一个慢sql工单,慢sql大概是这样:"select xxx from tabel where type = 1". 咦,type字段明明有索引啊,为啥是慢sql呢? ...
- 【matplotlib 实战】--平行坐标系
平行坐标系是一种统计图表,它包含多个垂直平行的坐标轴,每个轴表示一个字段,并用刻度标明范围.通过在每个轴上找到数据点的落点,并将它们连接起来形成折线,可以很容易地展示多维数据.随着数据增多,折线会堆叠 ...
- Go 常用命令介绍
Go 常用命令 目录 Go 常用命令 一.Go 常用命令 1.1 go build 1.1.1 指定输出目录 1.1.2 常用环境变量设置编译操作系统和 CPU 架构 1.1.3 查看支持的操作系统和 ...
- 如何用ppt打印9张一面,并且去除边距?
如何用ppt打印9张一面,并且去除边距? 方法其实很简单,答主不要在ppt软件的打印选项里设置[每页打印9张幻灯片],而是使用默认的[每页打印1张幻灯片]. 然后去[打印机属性]里设置,我是 ...