【问题标题】:docker alpine /bin/sh script.sh not founddocker alpine /bin/sh script.sh 未找到
【发布时间】: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 请将其作为答案发布,因为这也解决了我的问题。

标签: bash shell docker alpine


【解决方案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(无效)。

    【讨论】:

      猜你喜欢
      • 2017-03-08
      • 2022-01-07
      • 2021-07-24
      • 1970-01-01
      • 2017-10-20
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      相关资源
      最近更新 更多