ไฟล์ daemon.json อาจมีการตั้งค่า DNS การจัดเก็บ หรือการบันทึกอยู่แล้ว เมื่อเปลี่ยนพร็อกซีควรคงคีย์เหล่านั้นไว้

ด้วย yq v4 ของ Mike Farah ให้กำหนดแต่ละฟิลด์แยกกันแล้วเขียนตัวเลือกแยกไฟล์:

http_proxy='http://proxy.example:8080' \
https_proxy='http://proxy.example:8080' \
no_proxy='localhost,127.0.0.1,.internal.example' \
yq -o=json '
  .proxies."http-proxy" = strenv(http_proxy) |
  .proxies."https-proxy" = strenv(https_proxy) |
  .proxies."no-proxy" = strenv(no_proxy)
' /etc/docker/daemon.json > daemon.proxy-candidate.json

รายการพร็อกซี HTTP เสนอตัวเลือกสำหรับค่า URL แบบ HTTP ทั้งสองค่าเมื่อทราฟฟิกไปยัง registry สาธารณะอาจใช้ตัวกลางสาธารณะ ควรคงการข้ามภายในไว้ strenv อ่านแต่ละค่าเป็นสตริง ส่วน env จะแยกวิเคราะห์ค่า YAML ซึ่งไม่จำเป็นสำหรับฟิลด์ URL และการข้ามเหล่านี้ ชื่อตัวแปรสภาพแวดล้อมภายใน strenv ไม่มีเครื่องหมายดอลลาร์นำหน้า

การกำหนดสามฟิลด์จะรักษาสมาชิกอื่นของ proxies รวมถึงการตั้งค่าระดับบนที่ไม่เกี่ยวข้องไว้ด้วย ตัวเลือก -o=json ทำให้ผลลัพธ์อยู่ในรูปแบบที่ Docker คาดหวัง โปรแกรมอื่นชื่อ yq อาจมีภาษานิพจน์ที่ต่างกัน

ตรวจสอบตัวเลือกก่อนแทนที่ไฟล์ที่ใช้งานผ่านกระบวนการกำหนดค่าตามปกติของเครื่อง การเขียนกลับไปยังไฟล์อินพุตโดยตรงด้วยการเปลี่ยนเส้นทางของเชลล์อาจตัดไฟล์ก่อนที่ yq จะอ่าน

ชื่อฟิลด์ที่มีขีดกลางเหล่านี้กำหนดค่า daemon ของ Docker Engine ส่วน Docker Desktop ใช้การตั้งค่าพร็อกซีของตัวเอง และออบเจ็กต์พร็อกซีสภาพแวดล้อมคอนเทนเนอร์ของ CLI มีสคีมาอีกแบบ

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