עריכת שדות ה-proxy של Docker daemon.json עם yq v4
השתמשו ב-yq v4 של Mike Farah כדי לשמר את הגדרות ה-daemon הקיימות, להוסיף מחרוזות proxy ולהפיק מועמד JSON שניתן לסקור.
קובץ daemon.json עשוי כבר להכיל הגדרות DNS, אחסון או רישום. בעת שינוי ה-proxy יש לשמר את המפתחות האלה.
עם 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רשימת ה-proxy של HTTP מציעה מועמדים לשני ערכי ה-URL של HTTP כאשר תעבורת registry ציבורית עשויה לעבור דרך מתווכים ציבוריים; שמרו על העקיפות הפנימיות. strenv קורא כל ערך כמחרוזת. env לעומת זאת מנתח ערכי YAML, מה שאינו נחוץ לשדות ה-URL והעקיפה האלה. לשם משתנה הסביבה בתוך strenv אין קידומת של דולר.
הקצאת שלושה שדות משמרת את שאר האיברים ב-proxies וכן הגדרות עליונות לא קשורות. האפשרות -o=json שומרת על הפלט בתבנית ש-Docker מצפה לה. לתוכנית אחרת בשם yq עשויה להיות שפת ביטויים אחרת.
סקרו את המועמד לפני החלפת הקובץ הפעיל דרך תהליך התצורה הרגיל של המכונה. כתיבה ישירה חזרה לקלט עם הפניית shell עלולה לחתוך אותו לפני ש-yq קורא אותו.
שמות השדות האלה עם מקף מגדירים את ה-daemon של Docker Engine. Docker Desktop משתמש בהגדרות proxy משלו, ולאובייקט ה-proxy של סביבת הקונטיינר ב-CLI יש סכימה אחרת.