नए डॉकर क्लाइंट पुराने डॉकर होस्ट के साथ


12

हमारे पास RHEL 6.6 पर चलने वाला थोड़ा पुराना Docker सर्वर है। यह अभी हमारे ऑपरेशन टीम द्वारा अच्छी तरह से समर्थित नहीं है, इसलिए हम आसानी से अपग्रेड नहीं कर सकते हैं। अभी यह EPEL रेपो से Docker 1.3.2 चलाता है। यदि मैं इसमें ssh करता हूं तो वह सब कुछ करता हूं जो मुझे सबूतों की अवधारणा के लिए चाहिए जो मुझे उम्मीद है कि सड़क के नीचे डोकर के बुनियादी ढांचे के समर्थन को बेहतर बनाने के लिए मुझे प्रबंधन को धक्का देने में मदद करेगा।

मैंने इसे टीसीपी / टीएलएस पर सुनने के लिए सेट किया है, और मैं इसे कनेक्ट करने में सक्षम हूं, लेकिन यह मेरे स्थानीय डॉक क्लाइंट द्वारा दिए गए आदेशों को चलाने से इनकार करता है।

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.4
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15)

मुझे पता है कि कनेक्शन स्वयं काम करता है क्योंकि figकाम करता है:

$ cat > fig.yml
test:
    image: busybox
$ fig run --rm test sh
/ # hostname -f
084f75fb59d4

क्या कोई तरीका है जब मैं नए डॉकटर क्लाइंट को पुराने डॉकटर एपीआई संस्करण का उपयोग करने के लिए कह सकता हूं जब तक कि मैं एक नए डॉकटर होस्ट तक नहीं पहुंच सकता हूं?


RHEL पर एक डॉक ग्राहक का उपयोग करें ?
माइकल हैम्पटन

@Michael Hampton इस डॉक बॉक्स से जुड़ने वाले डेवलपर्स विभिन्न विंडोज और ओएस एक्स वर्कस्टेशन पर हैं। वे boot2docker स्थापित करते हैं और इस होस्ट में इंगित किए गए उसी docker क्लाइंट का उपयोग करना चाहते हैं।
कोजिरो

फिर, आदर्श विकल्प एक लिनक्स वितरण का उपयोग करना है जो नवीनतम डॉकर संस्करण को ट्रैक करता है। फिलहाल, यह फेडोरा सर्वर है।
माइकल हैम्पटन

मैं अनुमान लगा रहा हूं कि आप ऑपरेशन वालों को आरएचईएल 7 में अपग्रेड करना चाहेंगे, जो वर्तमान में 1.2 प्रतीत होता है, और वेतन वृद्धि होगी (जैसा कि यह एक्स्ट्रा चैनल में है, इसलिए कोर की तुलना में तेजी से बढ़ सकता है)। यदि आपकी ऑप्स टीम आरएचईएल 7 (रेड हैट के सशुल्क समर्थन के साथ) का समर्थन नहीं कर सकती है, तो वे निश्चित रूप से फेडोरा जैसी कुछ और रक्तस्रावी धार का समर्थन नहीं कर सकते हैं। आपके डेवलपर्स को बस यह स्वीकार करने की आवश्यकता है कि उन्हें मानक ऑपरेटिंग वातावरण में कोड करने की आवश्यकता है। Access.redhat.com/solutions/1408853 पर भी देखें "RHEL 7.1 में डॉकटर का समर्थन कैसे किया जाता है?"
कैमरून केर

जवाबों:


26

Docker 1.10.0 के बाद से, Docker इंजन के साथ Docker क्लाइंट संचार के लिए उपयोग किए जाने वाले API संस्करण को ओवरराइड करने का एक विकल्प है।

बस DOCKER_API_VERSION पर्यावरण चर का उपयोग करके।

पूर्व .:

$ docker version
Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d510
 Built:        Fri Feb  5 08:21:41 UTC 2016
 OS/Arch:      darwin/amd64
Error response from daemon: client is newer than server (client API version: 1.22, server API version: 1.21)

$ DOCKER_API_VERSION=1.21 docker version
Client:
 Version:      1.10.0
 API version:  1.21
 Go version:   go1.5.3
 Git commit:   590d510
 Built:        Fri Feb  5 08:21:41 UTC 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   a34a1d5
 Built:        Fri Nov 20 17:56:04 UTC 2015
 OS/Arch:      linux/amd64

संदर्भ: https://docs.docker.com/engine/reference/commandline/cli/#environment-variables

संपादित करें

डॉकर 1.13 के बाद से, सीएलआई में एक बेहतर पश्चगामी संगतता है। Https://blog.docker.com/2017/01/whats-new-in-docker-1-13 के अनुसार :

1.13 से शुरू होकर, नए सीएलआई पुराने डेमों से बात कर सकते हैं। हम फीचर वार्ता भी जोड़ रहे हैं ताकि एक नए क्लाइंट द्वारा पुराने डेमॉन में समर्थित सुविधाओं का उपयोग करने का प्रयास करने पर उचित त्रुटियां वापस आ जाएं। यह इंटरऑपरेबिलिटी में बहुत सुधार करता है और एक ही मशीन से अलग-अलग वर्जन के साथ डॉकर इंस्टॉल को मैनेज करना ज्यादा सरल बनाता है।


1

यदि आप सर्वर को आसानी से अपग्रेड नहीं कर सकते हैं, तो आपको आसानी से अपने क्लाइंट को डाउनग्रेड करने में सक्षम होना चाहिए। Docker GitHub में खुला स्रोत है । संस्करण 1.3.3 1.15 क्लाइंट एपीआई के साथ अंतिम था। यहाँ टैग के लिए एक सीधा लिंक है।

रेपो का एक स्थानीय क्लोन बनाएं, निर्माण करें, बाइनरी बनाएं और फिर उत्पादित बाइनरी को स्वैप करें:

sudo service docker stop ; sudo cp $(which docker) $(which docker)_ ; sudo cp ./bundles/1.3.3-dev/binary/docker-1.3.3-dev $(which docker);sudo service docker start

रजिस्ट्री .hub.docker.com/u/ignharmsystems/docker-client एक डॉक कंटेनर के अंदर एक डॉक क्लाइंट (एक विशिष्ट संस्करण का) लगता है। इस समय बनाने में असफल होने लगता है, लेकिन शायद यह कुछ उपयोगिता दे सकता है .... थोड़ा प्रयास करने की आवश्यकता हो सकती है, लेकिन कुछ टूलींग के साथ डॉक क्लाइंट के कई संस्करणों को प्रदान करने के लिए अच्छी तरह से स्केल होना चाहिए।
कैमरन केर

1
मुझे पता चला कि आप सीधे पूर्व-निर्मित ग्राहक भी डाउनलोड कर सकते हैं। आप URL को get.docker.com पर स्थापित स्क्रिप्ट से प्राप्त कर सकते हैं । उदाहरण के लिए, मुझे OS X के लिए get.docker.com/builds/Darwin/x86_64/docker-1.3.2 की आवश्यकता है।
kojiro
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.