Dockerfile-Exec-Form: curl --noproxy * ohne Shell-Anführungszeichen übergeben
In der Exec-Form ist jeder JSON-String ein Argument. Zusätzliche Shell-Anführungszeichen können den Wert ändern, den curl für --noproxy erhält.
In der Exec-Form des Dockerfile ist das JSON-Array bereits die Argumentliste:
CMD ["curl", "--noproxy", "*", "https://example.com/"]
Hier erhält curl --noproxy und * als getrennte Argumente. Das Sternchen wird nicht zu Dateinamen expandiert, weil keine Befehlsshell diese Form interpretiert.
Setzen Sie Option und Wert nicht in einen einzigen JSON-String. Fügen Sie auch keine wörtlichen einfachen Anführungszeichen in den String ein, nur weil ein Terminalbeispiel sie zum Schutz der Shell verwendet hat. Diese Anführungszeichen können Teil des Werts werden, der an das Programm übergeben wird.
Die Shell-Form hat eine andere Grenze: Sie bezieht eine Shell ein, daher gelten dort die Regeln für Anführungszeichen und Expansion. Eine ausdrückliche Shell, die aus einem Befehl in Exec-Form gestartet wird, fügt diese Grenze wieder hinzu.
Die Bedeutung von --noproxy * bei curl ist, den Proxy für alle Hosts zu umgehen. Das ist eine Routing-Entscheidung, kein allgemeiner Test des Argumentformats. Verwenden Sie es nur, wenn die direkte Route die beabsichtigte Richtlinie ist. Wenn Sie eine engere Umgehung benötigen, geben Sie den passenden Wert in derselben Struktur an: ein Argument pro Element.