2017-03-15 1 views

Antwort

4

Es gibt zwei Unterschiede zwischen der Shell-Form und der Exec-Form. Laut der Dokumentation ist das Exec-Formular die bevorzugte Form. Dies sind die zwei Unterschiede:

Das EXEC-Formular wird als JSON-Array analysiert, was bedeutet, dass Sie doppelte Anführungszeichen (") um Wörter nicht einfache Anführungszeichen (') verwenden müssen.

Im Gegensatz zur Shell-Form ruft das Exec-Formular keine Befehlsshell auf. Dies bedeutet, dass normale Shell-Verarbeitung nicht stattfindet. Zum Beispiel führt CMD ["echo", "$ HOME"] keine Variablensubstitution auf $ HOME durch. Wenn Sie eine Shell-Verarbeitung wünschen, verwenden Sie entweder das Shell-Formular oder führen Sie direkt eine Shell aus, zum Beispiel: CMD ["sh", "-c", "echo $ HOME"]. Wenn Sie das exec-Formular verwenden und eine Shell direkt ausführen, wie dies beim Shell-Formular der Fall ist, führt die Shell die Erweiterung der Umgebungsvariablen aus, nicht das Andockfenster.

Einige zusätzlichen Feinheit sind hier:

Die exec Form macht es möglich, Shell String munging zu vermeiden, und Befehle, um ein Grundbild verwenden, die nicht die angegeben Shell ausführbar enthalten.

In der Shell-Form können Sie einen \ (Backslash) verwenden, um eine einzelne RUN-Anweisung in der nächsten Zeile fortzusetzen.

Es gibt auch eine dritte Form für CMD:

CMD [ "param1", "param2"] (als Standardparameter ENTRYPOINT)

https://docs.docker.com/engine/reference/builder/#run
https://docs.docker.com/engine/reference/builder/#cmd

Verwandte Themen