Forma exec w Dockerfile: przekazywanie curl --noproxy * bez cudzysłowów powłoki
W formie exec każdy ciąg JSON jest jednym argumentem. Dodatkowe cudzysłowy powłoki mogą zmienić wartość, którą curl otrzymuje dla --noproxy.
W formie exec Dockerfile tablica JSON jest już listą argumentów:
CMD ["curl", "--noproxy", "*", "https://example.com/"]
Tutaj curl otrzymuje --noproxy i * jako osobne argumenty. Gwiazdka nie jest rozwijana na nazwy plików, ponieważ żadna powłoka poleceń nie interpretuje tej formy.
Nie umieszczaj opcji i wartości w jednym ciągu JSON. Nie dodawaj też dosłownych pojedynczych cudzysłowów wewnątrz ciągu tylko dlatego, że przykład w terminalu użył ich do ochrony powłoki. Te znaki cudzysłowów mogą stać się częścią wartości przekazywanej programowi.
Forma powłoki ma inną granicę: obejmuje powłokę, więc zasady cudzysłowów i rozwijania mają tam znaczenie. Jawna powłoka uruchomiona z polecenia w formie exec przywraca tę granicę.
Znaczenie --noproxy * w curl to ominięcie serwera proxy dla wszystkich hostów. To wybór trasy, a nie ogólny test formatu argumentów. Używaj go tylko wtedy, gdy trasa bezpośrednia jest zamierzoną polityką. Jeśli potrzebujesz węższego ominięcia, podaj pasującą wartość w tej samej strukturze jeden argument na element.