2017-04-13 73 views
0

RUN指令在Dockerfile,RUN指令有兩種形式shellexec什麼執行。在執行模式

# shell form 
RUN <command> 

# exec form 
RUN ["executable", "param1", "param2"] 

當殼形式使用<command>被一個外殼中運行,前面加上到其上的適當的外殼(即:sh -c "<command>")。 到目前爲止,問題是:EXCEL如何工作?如何執行命令而不使用shell?閱讀官方文檔我沒有找到滿意的答案。

+0

@cdarke:我相信OP可能指的是docker;它使用'run'來執行它執行的命令。 –

+0

是的,赦免,我的意思是Dockerfile ... –

回答

0

這看起來像一個碼頭文件。

使用RUN語法,命令將在para virtualised環境中一次運行一個命令,並且將爲每個命令生成給定環境(通常爲Bash)的默認shell。 sh -c對於bash是「短手」,所以你實際上是在做同樣的事情。

0

在外殼形式,該命令將與/ bin/sh的-c

RUN apt-get update 

Exec的格式的外殼內運行允許圖像命令的執行沒有那個/ bin/sh的

RUN [「apt-get」, 「update」] 

殼的形式是比較容易寫,你可以進行變量的殼解析 •例如

CMD sudo -u $(USER} java .... 

•Exec表單不需要圖像具有外殼。

+0

這種類型的信息在官方文檔中。問題在於:_「Exec格式允許在沒有/ bin/sh的映像中執行命令」_但是如果映像沒有/ bin/sh如何執行命令? –

1

命令的exec形式使用Docker用來運行shell本身的相同OS系統調用運行您的命令。它只是執行linux用於運行任何進程的fork/exec的命名空間版本。外殼本身是一種提供PATH處理,可變擴展,IO重定向和其他腳本功能的便利,但這些不需要在操作系統級別運行進程。 This question可能會幫助您瞭解Linux如何運行進程。