2016-03-15 57 views
0

我正在做一件非常简单的事情。这里是我的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

我复制你的脚步上面用我自己的码头工人形象,以及它工作得很好,没有任何问题。所以,这个问题必须与你正在摆脱的码头形象有关。该文件显然存在。这必须是一个权限问题。您应该检查,看看你是什么样的用户默认,您的权限,等等你能带我们去了'Dockerfile'是高山是从哪里来的,我们可以给更多的细节? – CtheGood

+1

在做了更多的思考之后,我有另一个假设。对于泊坞窗图像的入口点,可以改变你的用户,或与您的bash终端搞乱。尝试运行这个'docker run -it hello bash',然后在容器内部运行'hello'(并输出)。这将告诉我们图像的入口点和/或CMD是否有点奇怪。为什么你的第二个例子会工作的原因是因为它被重写Dockerfile的'CMD'明确。 – CtheGood

+0

嗨@CtheGood,感谢您关注此问题。您的评论让我思考,我确实认为这是某种用户/组/权限问题。所以我在一台Ubuntu计算机上编写了这个脚本,我试图在一张阿尔卑斯山的图片中运行它,这似乎是导致这个问题的原因。一旦我切换到Ubuntu的映像,问题就消失了。 –

回答

0

问题通过使用Ubuntu的图像,而不是阿尔卑斯山的形象解决。不完全确定为什么,但可能与文件的用户/权限位被复制并且没有正确解释有关。

+0

它也可能是不同的shell问题!你可以尝试检查当前的shell。 – ASR

0

我有类似的问题在哪里,无论我的Python应用程序是如何简单(只需想象这hello.py输出“世界你好”),通过码头工人,撰写运行时建立& &的命令我得到了错误打招呼。 py - 未找到。 原来,问题是virtualbox没有正确安装我的文件夹(应用程序)。在此之前为抢救和在5分钟内解决我的问题: Docker + Ubuntu + Virtualbox: "volumes" directive in dockerfile not working

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效 – slfan

0

没有发现可以从文件:

  • 的文件实际上是不存在的,检查错别字,请确保你不是活得当你只应该运行命令(不是这个问题,而是多次看到它)时,试图运行引用的命令和所有参数。并确保你没有在你期望的命令之上安装一个音量。
  • 脚本顶部的命令不存在。例如。试图在容器只有sh时调用bash。这也适用于在Windows上创建脚本并在命令结尾处具有无效换行的人员。我不相信Alpine在其他基本图像中包含bash。
  • 您尝试运行容器内不存在的链接库的二进制文件。这与阿尔卑斯与musl libc版本的差异可见一斑。