2016-03-15 58 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版本的差異可見一斑。