ในรูปแบบ exec ของ Dockerfile อาร์เรย์ JSON คือรายการอาร์กิวเมนต์อยู่แล้ว:

CMD ["curl", "--noproxy", "*", "https://example.com/"]

ที่นี่ curl ได้รับ --noproxy และ * เป็นอาร์กิวเมนต์แยกกัน ดอกจันไม่ถูกขยายเป็นชื่อไฟล์เพราะไม่มี command shell ใดตีความรูปแบบนี้

อย่าใส่ออปชันและค่าไว้ในสตริง JSON เดียว และอย่าเพิ่มเครื่องหมายคำพูดเดี่ยวแบบตัวอักษรลงในสตริงเพียงเพราะตัวอย่างใน terminal ใช้มันเพื่อป้องกัน shell อักขระเครื่องหมายคำพูดเหล่านั้นอาจกลายเป็นส่วนหนึ่งของค่าที่ส่งให้โปรแกรม

รูปแบบ shell มีขอบเขตอีกอย่างหนึ่ง: มันเกี่ยวข้องกับ shell ดังนั้นกฎการใส่เครื่องหมายคำพูดและการขยายจึงสำคัญที่นั่น shell ที่ระบุชัดเจนซึ่งเริ่มจากคำสั่งในรูปแบบ exec จะเพิ่มขอบเขตนั้นกลับเข้ามา

ความหมายของ --noproxy * ใน curl คือการข้ามพร็อกซีสำหรับทุกโฮสต์ นี่เป็นการเลือกเส้นทาง ไม่ใช่การทดสอบรูปแบบอาร์กิวเมนต์ทั่วไป ใช้มันเฉพาะเมื่อเส้นทางตรงเป็นนโยบายที่ต้องการ หากคุณต้องการการข้ามที่แคบกว่า ให้ระบุค่าที่ตรงกันในโครงสร้างหนึ่งอาร์กิวเมนต์ต่อหนึ่งองค์ประกอบเดียวกัน

บทความที่เกี่ยวข้อง