รูปแบบ exec ของ Dockerfile: ส่ง curl --noproxy * โดยไม่ใช้เครื่องหมายคำพูดของ shell
ในรูปแบบ exec แต่ละสตริง JSON คืออาร์กิวเมนต์หนึ่งตัว เครื่องหมายคำพูดของ shell ที่เพิ่มเข้ามาอาจเปลี่ยนค่าที่ curl ได้รับสำหรับ --noproxy
ในรูปแบบ exec ของ Dockerfile อาร์เรย์ JSON คือรายการอาร์กิวเมนต์อยู่แล้ว:
CMD ["curl", "--noproxy", "*", "https://example.com/"]
ที่นี่ curl ได้รับ --noproxy และ * เป็นอาร์กิวเมนต์แยกกัน ดอกจันไม่ถูกขยายเป็นชื่อไฟล์เพราะไม่มี command shell ใดตีความรูปแบบนี้
อย่าใส่ออปชันและค่าไว้ในสตริง JSON เดียว และอย่าเพิ่มเครื่องหมายคำพูดเดี่ยวแบบตัวอักษรลงในสตริงเพียงเพราะตัวอย่างใน terminal ใช้มันเพื่อป้องกัน shell อักขระเครื่องหมายคำพูดเหล่านั้นอาจกลายเป็นส่วนหนึ่งของค่าที่ส่งให้โปรแกรม
รูปแบบ shell มีขอบเขตอีกอย่างหนึ่ง: มันเกี่ยวข้องกับ shell ดังนั้นกฎการใส่เครื่องหมายคำพูดและการขยายจึงสำคัญที่นั่น shell ที่ระบุชัดเจนซึ่งเริ่มจากคำสั่งในรูปแบบ exec จะเพิ่มขอบเขตนั้นกลับเข้ามา
ความหมายของ --noproxy * ใน curl คือการข้ามพร็อกซีสำหรับทุกโฮสต์ นี่เป็นการเลือกเส้นทาง ไม่ใช่การทดสอบรูปแบบอาร์กิวเมนต์ทั่วไป ใช้มันเฉพาะเมื่อเส้นทางตรงเป็นนโยบายที่ต้องการ หากคุณต้องการการข้ามที่แคบกว่า ให้ระบุค่าที่ตรงกันในโครงสร้างหนึ่งอาร์กิวเมนต์ต่อหนึ่งองค์ประกอบเดียวกัน