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 映像一起使用?
尝试自己建立以alpine 为基础的docker基础镜像和组件镜像