आपकी पाइपलाइन को बिना बताए जो बदल गया
अपडेट के बाद होने वाली सबसे झुंझलाहट भरी गड़बड़ियों में से कई ऐसे छोटे बदलावों से आती हैं जिनकी किसी ने योजना नहीं बनाई थी। कोई डिफ़ॉल्ट मान खिसक जाता है। कोई सपोर्ट तारीख़ निकल जाती है। किसी वर्शन नंबर का मतलब पिछले साल से अलग हो जाता है।
तीन जुड़े मॉड्यूल वाली पाइपलाइन का AI-जनित वैचारिक चित्रण। यह किसी असली सिस्टम या उत्पाद का आरेख नहीं है।
ऐसे तीन बदलाव पिछले दो हफ़्तों में आए। Node.js अपनी रिलीज़ को नंबर देने और सपोर्ट करने का तरीक़ा बदल रहा है। Docker Desktop ने कंटेनर लॉग को डिफ़ॉल्ट रूप से सहेजने का तरीक़ा बदल दिया। और Go 1.25 को सुरक्षा फ़िक्स मिलना बंद हो गया, ठीक उसी समय जब फ़िक्स का एक बड़ा बैच जारी हुआ।
इनमें से कोई भी संकट नहीं है। हर एक को नज़रअंदाज़ करना आसान है, और हर एक की जाँच छोटी है।
तीनों में एक ही सूत्र है: सपोर्ट की तारीख़ें और डिफ़ॉल्ट। जिस टूल को आपने छुआ तक नहीं, वह भी आपके नीचे से बदल सकता है, क्योंकि जिस पर वह निर्भर है वह खिसक गया। यह लेख हर बदलाव को बारी-बारी से लेता है, बताता है कि किस पर असर पड़ता है, और अंत में एक छोटी चेकलिस्ट देता है।
Node.js: नया रिलीज़ मॉडल लागू हो रहा है
Node.js प्रोजेक्ट ने इस साल की शुरुआत में नया रिलीज़ शेड्यूल घोषित किया, जिसमें साल में दो की जगह एक मेजर रिलीज़ होगी। वह बदलाव अब लागू होना शुरू हो रहा है। पुराने मॉडल की आख़िरी रिलीज़ Node.js 26 है। वर्शन 27 से, हर अप्रैल में एक मेजर रिलीज़ होगी, और हर रिलीज़ दीर्घकालिक सपोर्ट (LTS) रिलीज़ होगी।
LTS का मतलब है कि प्रोजेक्ट गंभीर बग और सुरक्षा समस्याओं को लंबे समय तक ठीक करते रहने का वादा करता है। पुराने मॉडल में केवल सम संख्या वाली रिलीज़ को LTS मिलता था, और विषम संख्या वाली रिलीज़ कम समय की होती थीं। कई टीमें विषम रिलीज़ छोड़ देती थीं, फिर भी Node.js चलाने वाले स्वयंसेवकों को उन्हें संभालना पड़ता था।
नया मॉडल विषम/सम का बँटवारा हटा देता है। वर्शन नंबर साल से भी मेल खाएँगे: 27.0.0 2027 में आएगा, 28.0.0 2028 में।
Alpha नाम का एक नया शुरुआती परीक्षण चरण भी है। हर भावी वर्शन छह महीने Alpha में, छह महीने Current में, और 30 महीने LTS में रहेगा। Alpha बिल्ड के नाम 27.0.0-alpha.1 जैसे होते हैं। वे परीक्षण के लिए हैं, प्रोडक्शन के लिए नहीं, और प्रोजेक्ट कहता है कि बिल्ड के बीच उनका व्यवहार बदल सकता है।
आने वाले कुछ हफ़्तों में मॉडल से ज़्यादा तारीख़ें मायने रखती हैं। ये Node.js रिलीज़ शेड्यूल से ली गई हैं:
| वर्शन | LTS में प्रवेश | Maintenance में प्रवेश | जीवनकाल का अंत |
|---|---|---|---|
| 22 | 29 Oct 2024 | 21 Oct 2025 | 30 Apr 2027 |
| 24 | 28 Oct 2025 | 20 Oct 2026 | 30 Apr 2028 |
| 26 | 28 Oct 2026 | 20 Oct 2027 | 30 Apr 2029 |
Maintenance जीवनकाल के अंत से पहले का आख़िरी चरण है। Maintenance में रहने वाली रिलीज़ को अब भी महत्वपूर्ण फ़िक्स मिलते हैं, लेकिन नया काम रुक जाता है। Node.js सिफ़ारिश करता है कि प्रोडक्शन एप्लिकेशन केवल Active LTS या Maintenance रिलीज़ पर चलें, इसलिए 20 October को Node.js 24 अब भी सुरक्षित जगह है।
इस शेड्यूल का मेरा पाठ यह है कि आठ दिनों तक, 20 से 28 October तक, कोई भी Node.js लाइन Active LTS में नहीं होगी। Node.js 22 और 24 दोनों Maintenance में होंगे, और Node.js 26 अभी Current में होगा। यह अपने आप में समस्या नहीं है। लेकिन जो भी कहता है “बस Active LTS इस्तेमाल करो”, उसे साफ़ जवाब के लिए 28 October तक रुकना पड़ेगा।
क्या करें। अगर आप प्रोडक्शन में Node.js 24 चलाते हैं तो आप ठीक हैं, लेकिन 28 October को उसके Active LTS बनने के बाद 26 पर जाने की योजना शुरू कर दें। अगर आप Node.js 22 चलाते हैं, तो ध्यान दें कि वह 30 April 2027 को समाप्त होता है। अगर आप कोई लाइब्रेरी संभालते हैं, तो Alpha लाइन को अपने परीक्षणों में जल्दी जोड़ें। प्रोजेक्ट की अपनी सलाह है कि केवल LTS पर परीक्षण करने का मतलब है कि बग के बारे में आपको अपने उपयोगकर्ताओं के बाद पता चलेगा।
Docker Desktop: डिफ़ॉल्ट लॉग ड्राइवर बदल गया
यह वह बदलाव है जिससे चौंकने की संभावना सबसे ज़्यादा है, इसलिए इसे सबसे ज़्यादा जगह मिली है।
हर कंटेनर अपने आउटपुट में संदेश लिखता है। Docker उन संदेशों को एक लॉगिंग ड्राइवर के ज़रिए सहेजता है। कई सालों से ज़्यादातर सेटअप में डिफ़ॉल्ट json-file रहा है, जो हर संदेश को एक सादी फ़ाइल में JSON की एक पंक्ति के रूप में लिखता है।
अगर आप सीमा तय न करें तो वह फ़ाइल बिना रुके बढ़ती जाती है। लॉग कलेक्टर, यानी वे प्रोग्राम जो कंटेनर लॉग पढ़कर कहीं और भेजते हैं, अक्सर इन फ़ाइलों को सीधे पढ़ते हैं।
5 October को जारी Docker Desktop 4.94 ने नए Linux कंटेनरों के लिए डिफ़ॉल्ट को local नाम के ड्राइवर में बदल दिया। रिलीज़ नोट्स कारण बताते हैं: स्वचालित लॉग रोटेशन चालू करना। रोटेशन का मतलब है कि पुराने लॉग हटा दिए जाते हैं या कंप्रेस कर दिए जाते हैं ताकि डिस्क न भरे। डिफ़ॉल्ट रूप से local 20 MB की पाँच फ़ाइलों तक रखता है और पुरानी को कंप्रेस करता है, जो प्रति कंटेनर लगभग 100 MB होता है।
यह समझदारी भरा है, लेकिन local ड्राइवर लॉग को उसी रूप में नहीं सहेजता। Docker के अपने दस्तावेज़ बताते हैं कि उसकी फ़ाइलें केवल Docker डेमन के इस्तेमाल के लिए बनी हैं, और चेतावनी देते हैं कि बाहरी टूल उन्हें छुएँ तो गड़बड़ी हो सकती है। फ़ाइलें बाइनरी फ़ॉर्मैट में हैं, JSON पंक्तियों में नहीं।
एक तीसरे पक्ष का परीक्षण दिखाता है कि फ़ाइलें पढ़ने वाले कलेक्टर के लिए इसका क्या मतलब हो सकता है। DevOps Daily टीम ने एक आम लॉग कलेक्टर Fluent Bit को, Docker लॉग फ़ाइलों के लिए उसके मानक सेटअप के साथ चलाया। आकार की सीमा के बिना json-file कंटेनरों पर उसने सभी 500,000 परीक्षण पंक्तियाँ पढ़ीं। local कंटेनरों पर उसने एक भी नहीं पढ़ी, क्योंकि उसका सामान्य फ़ाइल पैटर्न local ड्राइवर की फ़ाइलों से मेल नहीं खाता।
जब उसे सीधे local फ़ाइल की ओर इंगित किया गया, तो उसने रिकॉर्ड पढ़े लेकिन एक को भी डिकोड नहीं कर सका। यह Docker Desktop पर नहीं, बल्कि Raspberry Pi पर Docker Engine 29.9.0 के साथ किया गया एक परीक्षण है, और उसमें केवल Fluent Bit शामिल था। जो कलेक्टर लॉग फ़ाइलों से नहीं बल्कि Docker API के ज़रिए पढ़ते हैं, उनका परीक्षण नहीं हुआ।
दूसरी तरह की गड़बड़ी कोड में पहले ही दिख चुकी है। Python के लिए Docker लाइब्रेरी, कंटेनर के local ड्राइवर इस्तेमाल करने पर containers.run() से कुछ नहीं लौटाती, क्योंकि वह केवल json-file और एक अन्य ड्राइवर का आउटपुट पढ़ती है। DataHub नाम के एक टूल को अपनी सेटअप जाँच में यह समस्या मिली, और उसने अस्थायी हल के तौर पर अपने अल्पकालिक कंटेनर के लिए json-file तय कर दिया। लाइब्रेरी में एक फ़िक्स प्रस्तावित है।
प्रभावित होने वाले मुख्य रूप से वे डेवलपर हैं जो Docker Desktop 4.94 या बाद का वर्शन इस्तेमाल करते हैं और जिनका लोकल सेटअप प्रोडक्शन की लॉगिंग पाइपलाइन की नक़ल करता है। Docker Engine चलाने वाले सर्वर इस रिलीज़ से नहीं बदलते।
यह बदलाव केवल नए कंटेनरों पर लागू होता है। आपके पास पहले से मौजूद कंटेनर, जब तक आप उन्हें दोबारा नहीं बनाते, उसी ड्राइवर के साथ रहते हैं जिसके साथ वे बने थे।
क्या जाँचें। अपनी मशीन पर डिफ़ॉल्ट देखने के लिए यह चलाएँ:
docker info --format '{{.LoggingDriver}}'
और अपने पास पहले से मौजूद हर कंटेनर का ड्राइवर देखने के लिए यह:
docker ps -aq | xargs docker inspect --format '{{.Name}} {{.HostConfig.LogConfig.Type}}'
अगर आपको local दिखे और आपका कलेक्टर लॉग फ़ाइलें पढ़ता है, तो दो विकल्प हैं। आप कलेक्टर को ऐसे कलेक्टर में बदल सकते हैं जो Docker API के ज़रिए पढ़ता है। या आप आकार की सीमा के साथ json-file तय कर सकते हैं, जो पुराना फ़ाइल फ़ॉर्मैट बनाए रखता है। वह सीमा सबसे पुरानी पंक्तियाँ हटा देती है:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
इसे Docker डेमन सेटिंग्स में तय करें, फिर अपने कंटेनर दोबारा बनाएँ ताकि वे इसे अपनाएँ। किसी एक सेवा के लिए, यही विकल्प आप इसके बजाय Compose फ़ाइल में रख सकते हैं।
एक अलग रिलीज़ के बारे में एक छोटा नोट। 14 October को जारी Docker Engine 29.9.1, Docker Desktop 4.94 से अलग अपडेट है। यह containerd, यानी कंटेनर चलाने वाले घटक, को वर्शन 2.4.2 पर ले जाता है।
यह ऐसी इमेज खींचते समय, जिसके डिस्क्रिप्टर में खराब एनोटेशन डाइजेस्ट हो, होने वाले क्रैश (CVE-2026-95839) को, और दो अन्य समस्याओं को ठीक करता है जिनका इस्तेमाल कोई हानिकारक रजिस्ट्री containerd को क्रैश करने या डिस्क भरने के लिए कर सकती थी। अगर आप सर्वरों पर Docker Engine चलाते हैं, तो शेड्यूल करने लायक अपडेट यही है।
Go: वर्शन 1.25 के लिए कोई फ़िक्स नहीं आएगा
8 October को Go टीम ने वर्शन 1.27.2 और 1.26.9 जारी किए। साथ मिलकर वे 15 सुरक्षा समस्याएँ ठीक करते हैं। ज़्यादातर स्टैंडर्ड लाइब्रेरी के वेब सर्वर और क्लाइंट कोड में हैं, यानी net/http में। Go की घोषणा वहाँ आठ सूचीबद्ध करती है, और बाक़ी crypto/tls, go कमांड, HTML टेम्पलेट, टेक्स्ट और मल्टीपार्ट पार्सिंग, तथा Windows के लिए एक में हैं।
ज़्यादातर टीमें जिस के बारे में सुनेंगी वह CVE-2026-97032 है। एक HTTP/2 सर्वर में, कोड के दो हिस्सों ने बिना तालमेल के एक ही तालिका को एक साथ बदला। कोई हानिकारक क्लाइंट इसका इस्तेमाल करके सर्वर को क्रैश कर सकता है। दूरस्थ क्लाइंट के कारण होने वाले क्रैश को सेवा अवरोध (denial of service) कहा जाता है।
इसकी रिपोर्ट GMO Flatt Security के RyotaK ने की। फ़िक्स Go 1.26.9, Go 1.27.2 में है, और उन प्रोग्रामों के लिए जो HTTP/2 कोड को सीधे इस्तेमाल करते हैं, golang.org/x/net पैकेज के वर्शन 0.60.0 में है।
Go हर मेजर रिलीज़ को तब तक सपोर्ट करता है जब तक दो नई मेजर रिलीज़ मौजूद हों। Go 1.27.0 19 August को आया, इसलिए Go 1.25 अब उस दायरे से बाहर है। उसकी आख़िरी रिलीज़ उसी तारीख़ की है। यानी ये फ़िक्स Go 1.25 में नहीं जोड़े जाएँगे।
सुरक्षा-कमज़ोरी का रिकॉर्ड नहीं बताता कि Go 1.25 खुद HTTP/2 समस्या से प्रभावित है या नहीं। आपको यह पता करने की ज़रूरत नहीं है। असमर्थित रनटाइम पर चल रही सेवा को अगली समस्या के फ़िक्स भी नहीं मिलते।
अपग्रेड से पहले दो चेतावनियाँ। इनमें से कुछ फ़िक्स जानबूझकर व्यवहार बदलते हैं:
- HTTP/1 क्लाइंट और सर्वर अब किसी भी CONNECT अनुरोध के बाद कनेक्शन बंद कर देते हैं।
net/http/httputilका रिवर्स प्रॉक्सी अब आने वाले CONNECT अनुरोधों का जवाब 405 Method Not Allowed से देता है।- Range हेडर में 200 से ज़्यादा बाइट रेंज वाले अनुरोधों को अब बिल्ट-इन फ़ाइल-सर्विंग हेल्पर अनदेखा कर देते हैं।
GODEBUG=httpservecontentmaxranges=0नाम की सेटिंग इसे बंद कर देती है।
अगर आप प्रॉक्सी चलाते हैं या ऐसा कुछ जो CONNECT को छूता है, तो अपग्रेड के बाद परीक्षण करें। बाकी सब इसे सामान्य अपडेट मान सकते हैं।
क्या जाँचें। अपनी बिल्ड मशीनों और कंटेनर इमेज में go version चलाएँ। अगर वह 1.25 या उससे पुराना दिखाए, तो बदलाव की योजना बनाएँ। हो सके तो अपने कोड पर Go का govulncheck टूल चलाएँ, जो केवल वही ज्ञात समस्याएँ बताता है जिन्हें आपका कोड वास्तव में बुलाता है।
आपको कितना जानना चाहिए
जानें। हर डेवलपर को पता होना चाहिए कि सपोर्ट की तारीख़ें और डिफ़ॉल्ट बदलते हैं, और ये तीन बदलाव मौजूद हैं। आपको हर एक का ब्योरा जानने की ज़रूरत नहीं है।
इस्तेमाल करें। जो लोग किसी पाइपलाइन, बेस इमेज या रनटाइम के मालिक हैं, उन्हें काम चलाऊ जानकारी चाहिए। यानी यह जानना कि आप कौन सी Node.js लाइन चलाते हैं, आपके कंटेनर कौन सा Docker लॉगिंग ड्राइवर इस्तेमाल करते हैं, और आपकी सेवाएँ किस Go वर्शन से बनी थीं।
गहराई से सीखें। कई टीमों के लिए वर्शन नीति तय करने वाले प्लेटफ़ॉर्म लीड को समझौतों को समझना चाहिए। इसमें यह शामिल है कि Maintenance रिलीज़ पर कितने समय रहना है, कब किसी डिफ़ॉल्ट को पिन करना है ताकि वह खिसक न सके, और Alpha या रिलीज़-कैंडिडेट बिल्ड पर पहले से परीक्षण कैसे करना है।
फ़िलहाल आप क्या अनदेखा कर सकते हैं
जब तक आप कोई लाइब्रेरी नहीं संभालते, Node.js 27 Alpha को छोड़ सकते हैं। जब तक आप इंटरनेट के सामने HTTP/2 सर्वर नहीं चलाते, अलग-अलग Go समस्याओं का ब्योरा छोड़ सकते हैं। और अगर आपके कंटेनर Docker Engine पर चलते हैं और आपके लॉग पहले से Docker API के ज़रिए जाते हैं, तो Docker के लॉग बदलावों को अनदेखा कर सकते हैं।
आगे क्या करें
अपने ऊपर लागू होने वाली तीन पंक्तियाँ चुनें और इसी हफ़्ते चलाएँ:
node -v, और नतीजे की तुलना ऊपर की तालिका से करें।docker info --format '{{.LoggingDriver}}', और अपने कलेक्टर की जाँच करें।go version, और 1.25 या उससे पुराने की तलाश करें।
अगर आपकी टीम के पास इस्तेमाल हो रहे रनटाइम वर्शनों की कोई सूची नहीं है, तो असली निष्कर्ष वही है। “हम क्या चलाते हैं और वह कब समाप्त होता है” की एक छोटी तालिका अगले खामोश बदलाव को आपको पकड़ने से पहले ही पकड़ लेगी।
संबंधित पठन के लिए, पाइपलाइनों को प्रभावित करने वाले एक और प्लेटफ़ॉर्म बदलाव को समझाने वाला GitHub Actions बदल रहा है: DevOps टीमों को क्या जानना चाहिए देखें, और OpenTelemetry: टेलीमेट्री पाइपलाइन का मालिक होना क्यों मायने रखता है, जो देखता है कि लॉग और अन्य संकेतों को कहाँ बहना चाहिए।
और गहराई में
- Evolving the Node.js Release Schedule, Node.js project. नए मॉडल का आधिकारिक विवरण। 18 October 2026 को समीक्षा की गई।
- Node.js release schedule, Node.js Release Working Group. ऊपर की तालिका की तारीख़ों का स्रोत। 18 October 2026 को समीक्षा की गई।
- Node.js previous releases, Node.js project. यह सलाह कि प्रोडक्शन एप्लिकेशन केवल Active LTS या Maintenance LTS रिलीज़ इस्तेमाल करें। 18 October 2026 को समीक्षा की गई।
- Docker Desktop release notes, Docker. वर्शन 4.94.0, 5 October 2026। 18 October 2026 को समीक्षा की गई।
- Local file logging driver, Docker documentation. डिफ़ॉल्ट और केवल डेमन के इस्तेमाल वाली टिप्पणी। 18 October 2026 को समीक्षा की गई।
- Docker Engine 29.9.1 release, Moby project. containerd अपडेट और सुरक्षा फ़िक्स। 18 October 2026 को समीक्षा की गई।
- docker-py issue 3455, docker-py project. local ड्राइवर के साथ containers.run() None लौटाता है, 13 October 2026 को खोला गया, pull request 3456 में एक पंक्ति का फ़िक्स है। 18 October 2026 को समीक्षा की गई।
- DataHub pull request 20403, DataHub project. सेटअप-जाँच कंटेनर के लिए json-file ड्राइवर तय करता है, 13 October 2026 को मर्ज हुआ। 18 October 2026 को समीक्षा की गई।
- Moby local logger documentation, Moby project. local ड्राइवर जो protobuf-एन्कोडेड लॉग रिकॉर्ड लिखता है उनका वर्णन। 18 October 2026 को समीक्षा की गई।
- Go release history, Go project. वर्शन 1.27.2 और 1.26.9, और सपोर्ट नीति। 18 October 2026 को समीक्षा की गई।
- Go 1.27.2 and Go 1.26.9 security announcement, Go team, 8 October 2026 को पोस्ट किया गया। 15 सुरक्षा फ़िक्स और व्यवहार बदलाव। 18 October 2026 को समीक्षा की गई।
- GO-2026-6617 (CVE-2026-97032), Go vulnerability database. HTTP/2 तालिका रेस और ठीक किए गए वर्शन। 18 October 2026 को समीक्षा की गई।
- docker-log-driver-check, DevOps Daily. ऊपर वर्णित तीसरे पक्ष का Fluent Bit परीक्षण, Docker Engine पर एक ही रन। 18 October 2026 को समीक्षा की गई।
