我正在做一些非常简单的事情。这是我的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
我可以看到我脚本的内容,这让我更加困惑。
答案 0 :(得分:1)
在我的情况下,问题是脚本的行尾是Windows
而不是Linux
编码的。 (注意:这实际上是由于git
自动将其转换(我禁用了)引起的)
脚本的第一行提供了Shell的文件路径。由于Windows EOL附带了额外的\r
,因此系统试图将隐藏的字符附加到文件名上,这就是导致Not Found
错误的原因。
答案 1 :(得分:0)
使用ubuntu图像而不是高山图像解决了问题。不完全确定原因,但可能与文件的用户/权限位被复制并且未正确解释有关。
答案 2 :(得分:0)
我遇到过类似的问题,无论我的python应用程序如何简单(想象一下hello.py输出'hello world'),当通过docker-compose build&& up命令我收到错误hello.py - 找不到。 原来,问题是virtualbox没有正确挂载我的文件夹(app)。这是一次救援,并在5分钟内解决了我的问题: Docker + Ubuntu + Virtualbox: "volumes" directive in dockerfile not working
答案 3 :(得分:0)
找不到的文件可以来自:
答案 4 :(得分:0)
这听起来像您在尝试执行bash
脚本,但是默认情况下alpine不包含bash
。相反,您需要通过将shebang行更改为sh
来使用#!/bin/sh
执行脚本。
实际上,脚本正在执行,但实际上是在说/bin/bash
不存在。