docker alpine /bin/sh script.sh 未找到

Posted

技术标签:

【中文标题】docker alpine /bin/sh script.sh 未找到【英文标题】:docker alpine /bin/sh script.sh not found 【发布时间】:2018-04-26 12:39:45 【问题描述】:

我正在尝试构建一个以 openjdk:8-alpine 为基础的 docker 映像。 问题是当我尝试执行 script.sh 时,返回以下消息:

/bin/sh: bin/script.sh: not found

script.sh 正确地位于 bin/ 文件夹中,所以我不知道是什么问题。

有人知道吗?

谢谢。

【问题讨论】:

bin/ 是相对路径。了解我们当前的工作目录会很有帮助,因此我们知道 相对于什么它正在被搜索。 另外,脚本的shebang也很重要。如果它使用#!/bin/bash,除非/bin/bash 实际存在,否则您将收到此错误。 (人们不应该在 bash 脚本上使用 .sh 扩展 - 或者旨在执行而不是作为一个整体来源的脚本 - 但无论他们是否应该或不应该,人们,所以这是一个非常现实的问题)。 @CharlesDuffy,非常感谢您的提问。你说的shebang的问题我这里测试过了,没错。你能输入答案吗? 我收到了同样的错误信息,但我的问题是行尾:我的 shell 脚本使用了 ash 不喜欢的 MS-DOS 行尾。一旦我将脚本文件转换为 Unix 行尾,一切正常。 @rlandster 请将其作为答案发布,因为这也解决了我的问题。 【参考方案1】:

确保脚本上的 shebang 指向实际存在的解释器。因此,如果被调用的脚本使用:

#!/bin/bash

...那么/bin/bash 需要实际安装。 (或者,您可以考虑尝试移植脚本以使用 POSIX sh,并将其 shebang 修改为 /bin/sh)。

【讨论】:

由于脚本不是我的,我决定在 alpine 中安装 bash,所以一切正常。恭喜,非常感谢,它非常快速和准确。对你有好处。【参考方案2】:

我收到了同样的错误消息,但我的问题是行尾:我的 shell 脚本使用了 ash 不喜欢的 MS-DOS 行尾。一旦我将脚本文件转换为 Unix 行尾,一切正常。

【讨论】:

这是我的问题,被低估的答案。【参考方案3】:

也遇到了这个问题。 确保 .sh 文件以 UNIX 编码保存。

【讨论】:

【参考方案4】:

对我来说,是 UTF-8(有效)vs UTF-8 with BOM(无效)。

【讨论】:

以上是关于docker alpine /bin/sh script.sh 未找到的主要内容,如果未能解决你的问题,请参考以下文章

Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?

使用“exit”后如何保留docker alpine容器?

尝试自己建立以alpine 为基础的docker基础镜像和组件镜像

无法使用 node:alpine 在 Docker 容器中运行 React 应用程序的开发版本

jenkins 添加docker容器节点

alpine安装telnet等工具