निजी डॉकटर-रजिस्ट्री तक दूरस्थ पहुंच कैसे प्राप्त करें?


82

मैं से ली गई छवि का उपयोग करके एक निजी डॉकटर रजिस्ट्री को सेटअप करने की कोशिश कर रहा हूं: https://github.com/docker/docker-nancy

बस चलाकर:
docker run -p 5000:5000 registry

मैं इस रिपॉजिटरी से केवल लोकलहोस्ट से / को पुश / पुश कर सकता हूं, लेकिन अगर मैं इसे किसी अन्य मशीन (उसी लैन पर निजी पते का उपयोग करके) से एक्सेस करने की कोशिश करता हूं तो यह एक त्रुटि संदेश के साथ विफल हो जाता है:

*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/': 
Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private 
registry supports only HTTP or HTTPS with an unknown CA certificate,
please add `--insecure-registry 10.0.0.26:5000` to the daemon's 
arguments. In the case of HTTPS, if you have access to the registry's
CA certificate, no need for the flag; simply place the CA certificate 
at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*

जो चीज मुझे पागल करती है, वह यह है कि मैं इसे सफलतापूर्वक उपयोग कर सकता हूं: curl 10.0.0.26:5000 और / याcurl 10.0.0.26:5000/v1/search

मुझे यह भी समझ में नहीं आ रहा है कि मुझे --insecure-registryध्वज कहाँ और कैसे पारित करना चाहिए ।


3
बहुत से उत्तर कर्ता 1.12 के लिए पुराने हो गए हैं, लेकिन vikas027 उत्तर देखें जो कि docker 1.12 (नवीनतम ATOW) के लिए बहुत अच्छा है
danday74

1
उबंटू पर, डॉकर प्रलेखन और इस जवाब ने मेरे लिए अच्छा काम किया।
बटांडवा

जवाबों:


73

ठीक है - मुझे इसका हल मिला - खुदाई के एक दिन बाद।

1.12.1 से नीचे docker के लिए:

यह पता चला है कि नया क्लाइंट संस्करण एसएसएल के बिना एक निजी रजिस्ट्री के साथ काम करने से इनकार करता है।

इसे ठीक करने के लिए - ग्राहक मशीन पर डेमॉन को असुरक्षित ध्वज के साथ लॉन्च किया जाना चाहिए:

बस टाइप करो:

sudo service docker stop # to stop the service

और फिर

sudo docker -d --insecure-registry 10.0.0.26:5000

( 10.0.0.26अपने खुद के आईपी पते के साथ बदलें )।

मुझे उम्मीद है कि docker के लोग इस ऑप्शन को पुल / पुश कमांड लाइन में जोड़ेंगे ...

संपादित करें - altenantively - आप ध्वज को DOCKER_OPTSenv चर के अंदर / etc / default / docker ... और फिर जोड़ सकते हैंsudo service docker restart

फिर से संपादित करें - ऐसा लगता है कि docker के लोग इस पर हैं - और जल्द ही एक सुधार आ जाएगा: https://github.com/docker/docker/pull/8935

डॉकटर १.१२.१ के लिए:

कृपया vikas027 (सेंटो के लिए मान्य) के उत्तर का पालन करें


मैं आपके चरणों को दोहराने में सक्षम था और एक दूरस्थ होस्ट पर एक निजी रजिस्ट्री को धकेल दिया गया। इसने सफल धक्का भी दिखाया। हालांकि, मैं निजी रजिस्ट्री पर छवियों को कैसे सूचीबद्ध करूं? मैंने कोशिश की docker -H tcp://remote-host-ip:5000 imagesलेकिन त्रुटि के साथ लौट आया।
हावर्ड ली

मैं सत्यापित कर सकता हूं कि ऐसा होता है। यह तब भी होता है जब आप <ip>: 5000 / v1 / खोज करते हैं - आपको खाली प्रतिक्रिया मिलती है। संभवतः एक अलग बग जो उनके पास है :-(
ओली एलियासाफ

अपडेट: मैं दूरस्थ निजी रजिस्ट्री पर संग्रहीत छवियों को खोज / खींचने में सक्षम था। docker search remote-host-ip:5000/image-nameऔर docker pull remote-host-ip:5000/image-nameदोनों ठीक काम करते हैं। अब, मैं इसे चित्रों को सूचीबद्ध करने के लिए कैसे प्राप्त करूं ...
हॉवर्ड ली

3
@ashleyaitken, मैंने Boot2Docker के साथ हल करने में मेरी सहायता करने के लिए निम्नलिखित संदर्भ का उपयोग किया: github.com/boot2docker/boot2docker#insecure-registry । उम्मीद है की वो मदद करदे।
पटेल

1
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पेटेर - मोनिका

28

यह मेरे लिए सेंटोस 7.2 और डॉकर 1.12.1 (तारीख पर नवीनतम) पर काम किया है। मेरी निजी रजिस्ट्री v2 चल रही थी 192.168.1.88:5000, उसी के अनुसार इसे बदलें। यह भी काम करता है यदि आपके पास कई रजिस्ट्रियां हैं, तो बस जोड़ते रहें--insecure-registry IP:Port

$ sudo vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd 
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000
$
$ sudo systemctl stop docker
$ sudo systemctl daemon-reload
$ systemctl start docker

1
यह समाधान केवल एक ही था जो उबंटू पर मेरे लिए काम करता था।
JARC 13

1
धन्यवाद आदमी - महान काम किया - एक कॉर्पोरेट प्रॉक्सी के पीछे उन लोगों के लिए इस पर आधारित एक फुलर उत्तर जोड़ा
danday74

2
मेरे लिए काम किया लेकिन docker.service /lib/systemd/system/docker.serviceUbuntu 16.04 पर था ।
करीम मधुमेह

4
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पीटर - मोनिका

1
काम। या आपको अपने पूरे सिस्टम को हैक करना होगा (एक अन्य समान "सुविधा" यह है कि "ब्रिजिंग नेटवर्किंग" का अर्थ है वास्तव में नेट में नेट नेटवर्किंग करना, जबकि असली ब्रिजेड नेटवर्क बस मौजूद नहीं है)। ये उत्तर बड़ी समस्याओं के लिए भयानक कार्यदलों को लोकप्रिय बनाते हैं, जिन्हें आसानी से तय किया जा सकता है लेकिन वे किसी भी तरह से नहीं हैं। यही कारण था, मैंने उन सभी को क्यों उखाड़ फेंका - ये सभी बुरे समाधान हैं।
पीटर - मोनिका

24

कॉन्‍फ़िगर फ़ाइल संपादित करें "/ etc / default / docker"

सुडो vi / etc / default / docker

फ़ाइल के अंत में लाइन जोड़ें

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-रजिस्ट्री = 192.168.2.1.13: 5000"

(अपने खुद के आईपी पते के साथ 192.168.2.170 बदलें)

और docker सेवा को पुनः आरंभ करें

sudo सेवा docker पुनरारंभ


धन्यवाद! /etc/init.d/dockerसिर्फ फ्लैट आउट संपादित करना Ubuntu 14.04 पर आश्चर्यजनक रूप से काम नहीं करता है। लेकिन अपने तय /etc/default/dockerकरता है।
एलिमिस्टेव

मेरी मेजबान प्रणाली उबंटू 14.04, भी है
दावो

1
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पीटर - मोनिका

12

मैंने पाया कि यह बहुत उपयोगी है क्योंकि यह चर्चा करता है कि कैसे डॉकर सेवा स्वयं कॉन्फ़िगर की गई है। https://docs.docker.com/articles/systemd/

इस लेख के साथ साथ systemctl कमांड पर https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

मैंने सेंटोस 7 आधारित कंटेनर में "डॉकटर रजिस्ट्री रजिस्ट्री: 2.1.1" द्वारा प्राप्त रजिस्ट्री छवि के साथ कमांड की निम्नलिखित श्रृंखला का उपयोग किया।

sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
sudo touch override.conf
sudo nano override.conf

और ओवरराइड के अंदर ।conf ने निम्नलिखित को जोड़ा।

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

ध्यान दें, पहले, रिक्त, ExecStart = पहले से मौजूद कुछ भी साफ़ करता है इसलिए /usr/lib/systemd/system/docker.service ExecStart = कथन से कुछ भी जोड़ना सुनिश्चित करें जिसे आप बनाए रखना चाहते हैं।

यदि आप -d (डेमन) विकल्प निर्दिष्ट नहीं करते हैं, तो आपको "कृपया केवल एक -H निर्दिष्ट करें" त्रुटि मिलेगी।

निम्नलिखित श्रंखलाओं को जारी करने के बाद मैं अपने ओवरराइड्स को देख सकता हूँ।

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl status docker

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─override.conf
   Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 5697 (docker)
   CGroup: /system.slice/docker.service
           └─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

नोट: स्थिति संदेश में भरी हुई: और ड्रॉप-इन: लाइनों द्वारा दी गई जानकारी, यह जांचने के लिए उपयोगी है कि काम करने के लिए पहले से मौजूद डॉकटर डेमॉन के साथ क्या हो रहा है।

नोट: इसके अलावा भरी हुई: docker.service फ़ाइल में एक पर्यावरण के लिए फ़ाइल = आगे के सुराग के लिए देखें।


2
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पीटर - मोनिका

नमस्कार @peterh मैं समझता हूं कि यह एक वर्कअराउंड है, और एक असुरक्षित है। मुझे इसमें कोई संदेह नहीं है कि इसका उपयोग करते हुए उत्पादन प्रणालियाँ हैं जो वास्तव में बहुत बुरी बात है।
TJA

1
@peterh आप मुझे किसी भी लिंक पर इंगित कर सकते हैं जो यह दर्शाता है कि इसे ठीक से कैसे करें और मैं अपने उत्तर को अपडेट करूंगा और लिंक का संदर्भ दूंगा।
TJA

11

ठीक। यहाँ है कि मैं इसे काम करने के लिए कैसे मिला। यदि आपको यह त्रुटि 1.3.2 या इसके बाद के संस्करण में दिखाई देती है, तो ऐसा करें

के लिए जाओ /etc/sysconfig/docker

other_args="--insecure-registry 10.0.0.26:5000"

और भाग खड़ा हुआ

sudo service docker restart


1
आपको ubuntu के तहत रजिस्ट्री मूल्य को प्रभावित करने के लिए एक '=' डालना है: "- असुरक्षित-रजिस्ट्री = 10.0.0.26: 5000"
रोमेन जौइन

@ जय मैं एक noob हूँ। 1.3.2 एक नए संस्करण की तरह लगता है। मैं देख रहा हूँ कि अगर मैं यहाँ गलत नहीं हूँ तो वर्तमान संस्करण १.१२ github.com/docker/docker/releases है।
रवींद्रप्र

1
@ ब्रह्माण्ड 3 से 12 छोटे किस ब्रह्मांड में है? ;)
ferrari2k

2
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पीटर - मोनिका

9

निम्न आदेश का उपयोग कर अपनी रजिस्ट्री के साथ {your_REGISTRY} की जगह लें

boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"

boot2dockerप्रश्न संदर्भ के लिए एक स्वतंत्र उपकरण किट अप्रासंगिक है।
बजे अरनौद मीरूट

2
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पीटर - मोनिका

7

docker.service फ़ाइल को संपादित करें, -insecure-रजिस्ट्री xxxx को -d ध्वज के बाद, docker को पुनः आरंभ करें

यह मेरे लिए काम करने वाली एकमात्र चीज़ है, DOCKER_OPTS का कोई प्रभाव नहीं पड़ा


आप जो कुछ भी कहते हैं वह सच है लेकिन विस्तार इतना
डरावना

2
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पेटेर -

4

डॉकटर 1.12.1

के लिए CentOS 7.2

/usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000

के लिए ubuntu 16.04

/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

ऐसा लगता है - इसके और रजिस्ट्री आईडी के बीच "=" के बिना --insecure-रजिस्ट्री विकल्प का उपयोग किया जा सकता है।


2
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पेटेर -

2

मैंने पाया कि डॉकटर क्लाइंट संस्करण और रजिस्ट्री डॉक वर्जन का मिलान करना होगा, अन्यथा आप सब कुछ होने के बावजूद कनेक्टिविटी मुद्दों में भाग लेंगे।


2

दो चरण समाधान (बिना --insecure-registry):

  1. अपनी रजिस्ट्री से सार्वजनिक कुंजी डाउनलोड करें
  2. इसे /etc/docker/certs.d/$HOSTNAME/निर्देशिका में रखो

 

mkdir -p /etc/docker/certs.d/10.0.0.26:5000
echo -n | openssl s_client -connect 10.0.0.26:5000 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/10.0.0.26:5000/registry.crt

अब आपका कर्ता आपके स्व-हस्ताक्षरित प्रमाणपत्र पर भरोसा करेगा।


1

यह सेंटोस 7 और डॉकर 1.12 पर vikas027 के उत्तर पर आधारित है

चूंकि मैं एक प्रॉक्सी के पीछे हूँ मेरा पूरा समाधान था ...

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="FTP_PROXY={{MY_PROXY}}"
Environment="ftp_proxy={{MY_PROXY}}"

Environment="HTTPS_PROXY={{MY_PROXY}}"
Environment="https_proxy={{MY_PROXY}}"

Environment="HTTP_PROXY={{MY_PROXY}}"
Environment="http_proxy={{MY_PROXY}}"

Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"

/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000

और पुनः आरंभ करने के लिए मत भूलना :)

sudo systemctl daemon-reload; sudo systemctl restart docker;

1
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पेटेर -

0

प्रॉक्सी में स्थानीय असुरक्षित रजिस्ट्री को प्रॉक्सी के साथ सेट करना:

1) ubuntu में निम्नलिखित ध्वज जोड़ें --insecure- रजिस्ट्री आईपी: फ़ाइल / etc / डिफ़ॉल्ट / docker में DOCKER_OPTS के अंतर्गत पोर्ट

1.1) स्थानीय IP / hostname / domainname को बायपास करने के लिए no_proxy env वैरिएबल को कॉन्फ़िगर करें ... जैसा कि प्रॉक्सी एक इंटरेक्टिव msg फेंक सकता है ... जारी रखें और यह मध्यवर्ती msg docker क्लाइंट को भ्रमित करता है और अंत में टाइमआउट ...

1.2) यदि domainname कॉन्फ़िगर किया गया है ... तो DNS का उपयोग न करने पर / etc / मेजबानों को अपडेट / होस्ट करना न भूलें।

1.3) / etc / default / docker में env वेरिएबल्स http_proxy और https_proxy सेट करें ... क्योंकि यह बाहरी कंपनी के हब से चित्र डाउनलोड करने में सक्षम बनाता है। स्वरूप http_proxy = http: // उपयोगकर्ता नाम: पासवर्ड @ प्रॉक्सी: पोर्ट

2) docker सेवा को पुनरारंभ करें ... यदि सेवा के रूप में स्थापित किया गया है, तो sudo सेवा docker पुनरारंभ का उपयोग करें

3) रजिस्ट्री कंटेनर को पुनः आरंभ करें [sudo docker run -p 5000: 5000 रजिस्ट्री: 2]

4) sudo docker tag imageid IP का उपयोग करके आवश्यक छवि को टैग करें: port / Imagename / tagname ifany

5) छवि को धक्का ... sudo docker push ip: port / Imagename

6) यदि आप किसी अन्य मशीन से छवि को B को TLS / SSL के बिना खींचना चाहते हैं, तो B में सेट अप 1,1.1 और 2 लागू करें। यदि ये परिवर्तन मशीन B में नहीं किए गए हैं ... तो पुल विफल हो जाएगा।


2
--insecure-registryवर्कअराउंड है, न कि फिक्स।
पीटर - मोनिका

0

आपको परेशानी से बचाने के लिए, आप सिर्फ gitlab द्वारा प्रदान की जाने वाली मुफ्त निजी डॉकटर रजिस्ट्री सेवा का उपयोग क्यों नहीं करते हैं - महान काम करता है

https://about.gitlab.com/2016/05/23/gitlab-container-registry/

उनकी रजिस्ट्री सुरक्षित है इसलिए आपके पास कोई समस्या नहीं होगी


0

उबंटू 16.04

/etc/systemd/system/docker.service.d/registry.confसामग्री के साथ फ़ाइल बनाएँ (मौजूद नहीं है) :

[Service]
#You need the below or you 'ExecStart=' or you will get and error 'Service has more than one ExecStart= setting, which is only allowed'
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000

फिर

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

0

उपरोक्त उत्तरों के अलावा, मैं अपने लिए "docker for mac" में काम कर रहा हूं:

  1. अपनी स्क्रीन के ऊपरी दाएँ कोने पर मैक ट्रे से docker व्हेल आइकन पर क्लिक करें ।
  2. प्राथमिकताएं -> डेमॉन पर क्लिक करें ।
  3. असुरक्षित रजिस्ट्रियों में अपना आईपी और पोर्ट जोड़ें।
  4. डेमॉन को फिर से शुरू करें।

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.