小伙伴碰到一起奇怪的事故,从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"的错误?的更多相关文章

  1. sh脚本异常,binsh^M bad interpreter No such file or directory

    错误 在Linux中执行.sh脚本,出现如下异常 /bin/sh^M: bad interpreter: No such file or directory 原因 在windows系统中编辑的.sh文 ...

  2. 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 ...

  3. 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 ...

  4. 执行脚本出现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 ...

  5. 转载:执行脚本出现bin/bash: bad interpreter: No such file or directory

    转载网址:http://blog.csdn.net/red10057/article/details/8051650 刚刚学习 SHELL 写了一个简单的例子 发生如下错误 -bash: ./test ...

  6. 在airflow的BashOperator中执行docker容器中的脚本容易忽略的问题

    dag模板 from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow. ...

  7. 如何解决jenkins中shell脚本明明执行失败却不自行退出,且构建结果仍然显示success的问题??

    首先,需要明确shell命令执行结果$?为0或者非0仅能代表此执行语句是否顺利执行了,例如: 执行语句:adb connect 192.168.XX.XX 执行结果:unable to connect ...

  8. 【转】执行脚本出现bin/bash: bad interpreter: No such file or directory

    [转自]http://blog.csdn.net/wind19/article/details/4822666 错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以/r/n来标识, 其 ...

  9. ClouderaManager中Event Server报No such file or directory

    错误日志如下: 2015-06-24 06:13:10,176 ERROR com.cloudera.cmf.eventcatcher.server.EventCatcherService: Erro ...

  10. Linux运行shell脚本提示No such file or directory错误的解决办法

    Linux执行.sh文件,提示No such file or directory的问题: 原因:在windows中写好shell脚本测试正常,但是上传到 Linux 上以脚本方式运行命令时提示No s ...

随机推荐

  1. Linux 使用grep过滤字符串中的指定内容

    命令示例:echo port 1234 123 | grep -oP 'port\s+\K\d+' 返回: 1234 这条命令使用 grep 工具来在文本中查找 "Port " 后 ...

  2. Mac装机必备软件2023

        码农一枚,Mac作为生产力工具已经有10多年了. 用Mac的原因除了系统清爽,逼格高之外,最主要还是因为作为一个资深全栈,要做Apple相关开发,必须用MacOS系统. 与Windows不同, ...

  3. django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE5\\xA4\\xAB\\xE4\\xBA\\xBA' f

    1.打开mysql命令行 show variables like '%char%'; 将字符集显示不是utf-8的更改为utf-8 例如:set character_set_database=utf8 ...

  4. Django2.2:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence

    报错截图: 解决方案: 打开django/views下的debug.py文件,转到line331行: with Path(CURRENT_DIR, 'templates', 'technical_50 ...

  5. Javascript执行原理 网页引入javascript的三种方式* javascript核心语法 数据类型 Typeof运算符

    Javascript执行原理: 用户端发送请求到服务器端 将js解析出来的数据(用户身份表示)绑定在请求路径中 服务器端获取到参数后会响应客户端 客户端通过浏览器解析响应的数据并将数据展现在浏览器上 ...

  6. Sparse-coding-based method in super resolution

    Is sparse-coding-based method still important in super resolution? Yes, sparse-coding-based methods ...

  7. CCF 202012-5星际旅行(20~100分)

    前置知识 线段树:通过懒惰标记,可实现区间处理,和区间询问皆为\(O(logn)\)时间复杂度的数据结构,是一种二叉树.因此对于一个节点\(st\),其左儿子节点为\(st*2\),右节点为\(st* ...

  8. Spark入门系列视频教程

     视频目录: Spark入门| 01 Spark概念架构 Spark入门| 02 Spark集群搭建 Spark入门| 03 Spark Shell算子操作 Spark入门| 04 Spark单词计数 ...

  9. JNI动态注册以及JNI签名

    一.动态注册和静态注册 注册native方法有两种方式,动态注册和静态注册.静态注册是在编译时进行注册,而且在java中声明的native方法和c/c++中的本地方法的对应关系是恒定的:比如说在com ...

  10. 一款广受社区好评的 WAF

    大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站,但是自建网站很容易被收到攻击,今天给大家介绍一款简单免费好用的 WAF 网站防护工具. WAF 是 Web Application Fi ...