मैं टीसीपी पर डॉकर एपीआई को कैसे उजागर करूं?

मैं पोर्टेनर का उपयोग कर रहा हूं और दूरस्थ समापन बिंदुओं को प्रबंधित करने में असमर्थ हूं । मैंने रिमोट डॉकर नोड्स से कनेक्ट करने के लिए कमांड लाइन का उपयोग करने की कोशिश की, लेकिन एक संदेश मिला Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running?.

हाँ, वे चल रहे हैं । मैंने खुद को डॉकर समूह में जोड़ा है और नोड्स में एसएसएचिंग करके डॉकर तक पहुंच सकता है । हालाँकि मैं किसी भी डॉकर नोड्स को दूरस्थ रूप से एक्सेस नहीं कर सकता ।

मैंने संशोधित किया /etc/default जोड़ने के लिए / uncomment DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

मैंने भी संशोधित किया /etc/init.d/docker और /etc/init/docker.conf शामिल करना DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock".

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

मुझे क्या याद आया? टीसीपी पर एपीआई को किस फाइल में कौन सा कॉन्फ़िगरेशन उजागर करता है?

user@hostname:~$ docker -H tcp://<REMOTE_IP>:2375 infoCannot connect to the Docker daemon at tcp://<REMOTE_IP>:2375. Is the docker daemon running?user@hostname:~$ docker -H tcp://127.0.0.1:2375 infoCannot connect to the Docker daemon at tcp://127.0.0.1:2375. Is the docker daemon running?user@hostname:~$ docker -H tcp://<LOCAL_IP>:2375 infoCannot connect to the Docker daemon at tcp://<LOCAL_IP>:2375. Is the docker daemon running?user@hostname:~$

संपादित करें:चल रहा है ps aux | grep -i docker यह देता है -

root      3581  0.1  0.2 596800 41540 ?        Ssl  04:17   0:35 /usr/bin/dockerd -H fd://root      3588  0.0  0.0 653576 14492 ?        Ssl  04:17   0:18 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc

मुझे एक समाधान मिला धन्यवाद इवान Krizsan की पोस्ट.

मुझे संपादित करना था /lib/systemd/system/docker.service लाइन को संशोधित करने के लिए मेरे उबंटू 16.04.2 एलटीएस सिस्टम पर

ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:

फिर

sudo systemctl daemon-reloadsudo systemctl restart docker.service

और सब कुछ काम किया: -) । अगला कदम यह पता लगाना है कि डॉकर डेमॉन फॉर्म को अपहृत कैसे किया जाए ।

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

/ लिब/सिस्टमड निर्देशिका वह जगह है जहां पैकेज अपनी सिस्टमड फाइलें स्थापित करेंगे, और वे अपग्रेड पर वहां किसी भी बदलाव को अधिलेखित कर देंगे । यदि आप इसका उपयोग करते हैं, तो आपके परिवर्तन खो जाएंगे ।

बनाने के लिए अपने स्वयं के परिवर्तन करने के लिए एक systemd इकाई फ़ाइल है कि जारी रहती है, आप कर सकते हैं एक इकाई बनाने के लिए फ़ाइल /etc/systemd/प्रणाली/गोदी श्रमिक.सेवा।डी/, उदाहरण के लिए यहाँ मेरा मानक / आदि / सिस्टमड/सिस्टम / डॉकर है । सेवा।डी / ओवरराइड.conf:

[Service]ExecStart=ExecStart=/usr/bin/dockerd

यह ओवरराइड बस सभी कमांड लाइन झंडे को सिस्टमड से डॉकरड डेमॉन को अनसेट करता है । एक बार हो जाने के बाद, आप /आदि/डॉकर/डेमॉन से हर सेटिंग को ओवरराइड कर सकते हैं । जेएसओएन जो डॉकर द्वारा उपयोग किया जाता है, और सेटिंग के आधार पर, डेमॉन को पुनरारंभ किए बिना पुनः लोड किया जा सकता है । उदाहरण के लिए यहां एक उदाहरण /आदि/डॉकर/डेमॉन है । json:

{"debug": false,"experimental": true,"hosts": ["fd://", "tcp://0.0.0.0:2376"],"labels": ["foo=bar", "fez=baz"],"log-driver": "json-file","log-opts": {"max-size": "10m", "max-file": "3"},"storage-driver": "overlay2","tlscacert": "/etc/docker/certs/ca.pem","tlscert": "/etc/docker/certs/host-cert.pem","tlskey": "/etc/docker/certs/host-key.pem","tlsverify": true}

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

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

क्लाइंट और सर्वर के लिए टीएलएस कुंजी को कॉन्फ़िगर करने के तरीके पर पूर्ण विवरण यहां पाया जा सकता है:https://docs.docker.com/engine/security/https/


ध्यान दें कि क्लाइंट पर डॉकर संस्करण 18.09 और उससे ऊपर (जहां आप अपना कमांड और रिमोट नोड चलाते हैं) के साथ, आप टीएलएस को कॉन्फ़िगर करने के बजाय एसएसएच का उपयोग कर सकते हैं । इसमें एक का उपयोग करना शामिल है DOCKER_HOST का मूल्य ssh://user@host. जैसे।

docker -H ssh://user@host container ls

एक आधिकारिक दस्तावेज बताता है कि कैसे कॉन्फ़िगर करें जहां डॉकर डेमॉन कनेक्शन के लिए सुनता है.

systemd बनाम डेमॉन से होकर.json

सिस्टमड यूनिट फ़ाइल और डेमॉन दोनों का उपयोग करके कनेक्शन सुनने के लिए डॉकर को कॉन्फ़िगर करना । जेसन फ़ाइल एक संघर्ष का कारण बनती है जो डॉकर को शुरू होने से रोकती है ।

सिस्टमड यूनिट फ़ाइल के साथ रिमोट एक्सेस को कॉन्फ़िगर करना

  1. उपयोग कमांड sudo systemctl संपादित डोकर.डॉकर के लिए ओवरराइड फ़ाइल खोलने के लिए सेवा । एक पाठ संपादक में सेवा।

  2. अपने स्वयं के मूल्यों को प्रतिस्थापित करते हुए, निम्नलिखित पंक्तियों को जोड़ें या संशोधित करें ।

    [Service]ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
  3. फ़ाइल सहेजें।

  4. पुनः लोड systemctl विन्यास.

    $ sudo systemctl daemon-reload
  5. डॉकर को पुनरारंभ करें ।

    $ sudo systemctl restart docker.service
  6. यह देखने के लिए जांचें कि क्या डॉकरड कॉन्फ़िगर किए गए पोर्ट पर सुन रहा है, इसकी पुष्टि करने के लिए नेटस्टैट के आउटपुट की समीक्षा करके परिवर्तन को सम्मानित किया गया था या नहीं ।

    $ sudo netstat -lntp | grep dockerdtcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd

रिमोट एक्सेस को कॉन्फ़िगर करना daemon.json

  1. मेजबान सरणी को /आदि/डॉकर/डेमॉन में सेट करें । जेएसओएन यूनिक्स सॉकेट और एक आईपी पते से कनेक्ट करने के लिए, निम्नानुसार है:

    {"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]}

    सिस्टमड यूनिट फ़ाइल और डेमॉन दोनों का उपयोग करके कनेक्शन सुनने के लिए डॉकर को कॉन्फ़िगर करना । जेसन फ़ाइल एक संघर्ष का कारण बनती है जो डॉकर को शुरू होने से रोकती है ।

    1. अपने स्वयं के मूल्यों को प्रतिस्थापित करते हुए, निम्नलिखित पंक्तियों को जोड़ें या संशोधित करें ।

      [Service]ExecStart=ExecStart=/usr/bin/dockerd
    2. फ़ाइल सहेजें।

    3. पुनः लोड systemctl विन्यास.

      $ sudo systemctl daemon-reload
  2. डॉकर को पुनरारंभ करें ।

  3. यह देखने के लिए जांचें कि क्या डॉकरड कॉन्फ़िगर किए गए पोर्ट पर सुन रहा है, इसकी पुष्टि करने के लिए नेटस्टैट के आउटपुट की समीक्षा करके परिवर्तन को सम्मानित किया गया था या नहीं ।

    $ sudo netstat -lntp | grep dockerdtcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd

डॉकर क्लाइंट का सम्मान करेगा DOCKER_HOST पर्यावरण चर सेट करने के लिए -H ग्राहक के लिए झंडा। निम्न आदेशों में से एक का प्रयोग करें:

$ docker -H tcp://127.0.0.1:2375 ps

या

$ export DOCKER_HOST="tcp://127.0.0.1:2375"$ docker ps

यदि आप अपने डॉकर डेमॉन को पुन: कॉन्फ़िगर और पुनरारंभ नहीं करना चाहते हैं तो आप यूनिक्स सॉकेट को टीसीपी सॉकेट में पुल कर सकते हैं ncat (से nmap पैकेज):

ncat -lknvp 2375 -c "ncat -U /var/run/docker.sock"

विकल्प के रूप में, आप उपयोग कर सकते हैं socat या अन्य उपकरण.

उबंटू सर्वर 20.04 के संदर्भ में इस उत्तर की तलाश करने वालों के लिए जो उपयोग करता है स्नैप:

इस टिप्पणी github मुद्दे आपको वह संदर्भ देना चाहिए जिसकी आपको आवश्यकता है । मेरे मामले में मुझे $स्नैप_डेटा पर्यावरण चर सेट नहीं मिला, इसलिए मुझे सभी डेमॉन की तलाश करनी पड़ी । सिस्टम पर जेसन फाइलें और एक के साथ इस्तेमाल किया /var उपसर्ग

$ sudo find / -name daemon.json

मेरे मामले में इसमें दो असंबंधित प्रविष्टियाँ थीं इसलिए मैंने अभी-अभी अपना जोड़ा:

{  [.....]  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]}

उपरोक्त आईपी निर्धारित करता है कि यह कहां से सुलभ होगा, और पोर्ट वह पोर्ट हो सकता है जिसे आप उजागर करना चाहते हैं । मेरे विशेष मामले में, मैं इसे एक विशिष्ट आईपी के साथ काम करने में सक्षम नहीं था, इसके बजाय मुझे 0.0.0.0 का उपयोग करना पड़ा, अन्यथा पुनरारंभ करते समय यह निम्न त्रुटि के साथ विफल हो जाएगा:

aufs aufs_fill_super:918:mount[3724]: no argoverlayfs: missing 'lowerdir'aufs aufs_fill_super:918:mount[3772]: no argoverlayfs: missing 'lowerdir'aufs aufs_fill_super:918:mount[3820]: no argoverlayfs: missing 'lowerdir'

अजीब पर्याप्त है, 0.0.0.0 का उपयोग करते समय यह वास्तव में उपरोक्त त्रुटि लाइनों की एक जोड़ी थूकता है लेकिन यह बाद में काम करता है । मेरे मामले में यह एक वीएम है यह मेरे लिए स्वीकार्य है ।

मैं करने की कोशिश की इसी तरह की बातें और संदेह है कि फाइल /etc/default/गोदी श्रमिक /आदि/init/गोदी श्रमिक.conf और /etc/init.डी/गोदी श्रमिक कर रहे हैं बस की अनदेखी पर Ubuntu 16.04 के साथ एक की स्थापना डोकर-ce, कर सकते हैं किसी को भी इस बात की पुष्टि? मुझे लगता है कि जब मैं “सर्विस डॉकर स्टेटस” चलाता हूं तो वास्तव में क्या होता है “सिस्टमसीटीएल स्टेटस डॉकर”, एक संपूर्ण अन्य प्रबंधन प्रणाली ।

2375 सुन रहा है? ss-ntl

नहीं।. 2375 पर कुछ भी नहीं सुन रहा है । और मैं यह पता नहीं लगा सकता कि किस फ़ाइल में कॉन्फ़िगरेशन इसे प्रभावित करता है । मैंने अपने उत्तर में पीएस ऑक्स के आउटपुट को शामिल किया है यदि वह मदद करता है ।