2017-10-14 71 views
0

我正在學習碼頭工具,並提及在線課程。經過一段舒適程度後,我正在嘗試製作一個dockerized java圖像,一個簡單的Java應用程序。創建一個簡單的Java應用程序作爲碼頭圖像

我正在嘗試使dockerized Java應用程序沒有任何最小的操作系統,因此在Dockerfile中使用FROM scratch。以下是內容:

FROM scratch 
ADD FirstJavaApp.class . 
RUN yum -y install java 
CMD java FirstJavaApp 

據我瞭解任何應用程序的dockerized形象應該有所有的依賴性滿足(並朝着這個目標,我已經添加在Dockerfile的yum -y install java)。

現在,當我建立使用該Dockerfile的形象,這是給我下面的錯誤:

sudo docker build -t javaappusingscratch . 
Sending build context to Docker daemon 377.8MB 
Step 1/4 : FROM scratch 
---> 
Step 2/4 : ADD FirstJavaApp.class . 
---> Using cache 
---> c624d7dc7c21 
Step 3/4 : RUN yum -y install java 
---> Running in 702829f38ad8 
container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory" 
oci runtime error: container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory" 

但是,如果我取代FROM scratchFROM centos這是工作的罰款。據我所知,scratch沒有任何最低限度的操作系統,我的目標是構建具有應用程序及其依賴項的圖像,這就是Docker圖像的目標。

那麼,有什麼我失蹤或理解不好?任何人都可以幫我理解這個嗎?

回答

1

除非您有外殼,並且您沒有scratch的外殼,否則您不能使用CMD。一般來說,你會發現Java依賴於一堆不是scratch的東西。你可以找到比centos更細的選項(例如Alpine),但它不會從scratch工作。

+0

但是,執行yum -y從日誌中安裝java時出現錯誤,因此無法理解從零開始提供的內容?你能否擴大你的答覆多一點。 – CuriousMind

+0

Cmd啓動一個shell。你沒有殼。你沒有百勝餐飲。 – bmargulies

+0

感謝您的回覆,我明白了。然而,我有一個疑問,主機操作系統是否提供了這些缺失的東西? Docker的這個概念不是爲容器提供服務,而是提供從主機內核到容器的服務?我可能是完全錯誤的,但是感覺在這裏分享這個想法。如果你的時間允許,請回復。 – CuriousMind

相關問題