6

我正在做一些非常简单的事情。这是我的Dockerfile

FROM alpine:latest

ADD hello.sh /bin/hello
RUN chmod +x /bin/hello

CMD /bin/hello

然后我构建图像:

docker build -t hello .

然后我运行图像:

docker run hello

这是输出:

/bin/sh: /bin/hello: not found

为什么会这样?如果我运行:

docker run hello cat /bin/hello

我可以看到我的脚本的内容,这让我更加困惑。

4

5 回答 5

7

在我的情况下,问题是脚本的行尾Windows编码而不是Linux. (注意:这实际上是由git自动转换它们引起的,我禁用了)

脚本的第一行提供了 shell 的文件路径。由于\rWindows EOL 中包含的额外内容,系统试图将该隐藏字符附加到文件名,这就是导致Not Found错误的原因。

于 2019-07-08T06:58:08.573 回答
4

通过使用 ubuntu 图像而不是 alpine 图像解决了问题。不完全确定原因,但可能与文件的用户/权限位被复制且未正确解释有关。

于 2016-03-15T05:11:36.157 回答
4

这听起来像你试图执行一个bash脚本,但默认情况下 alpine 不包括bash. 相反,您需要sh通过将 shebang 行更改为#!/bin/sh.

实际上,脚本正在执行,但它实际上是/bin/bash在说不存在。

于 2020-05-20T22:07:05.700 回答
4

找不到的文件可能来自:

  • 该文件实际上不存在,检查拼写错误,确保您没有尝试运行带引号的命令和所有参数,而您应该只运行该命令(不是这个问题,但见过很多次)。并确保您没有将卷安装在您期望命令的顶部。
  • 脚本顶部的命令不存在。例如,当容器只有 sh 时尝试调用 bash。这也适用于那些在 Windows 上创建脚本并在命令末尾有无效换行符的人。我不相信 Alpine 包含其他基本映像所包含的 bash。
  • 您尝试运行的二进制文件链接容器内不存在的库。这在具有 musl libc 版本差异的 Alpine 中可以看到。
于 2018-02-18T13:18:52.863 回答
0

我遇到过类似的问题,无论我的python应用程序多么简单(想象一下输出'hello world'的hello.py),当通过docker-compose build && up命令运行时,我得到错误hello.py - 找不到。原来问题是 virtualbox 没有正确挂载我的文件夹(应用程序)。这是一个救援,并在 5 分钟内解决了我的问题: Docker + Ubuntu + Virtualbox:dockerfile 中的“volumes”指令不起作用

于 2018-02-18T12:33:39.240 回答