আমি টিসিপি-র মাধ্যমে ডকার এপিআই কীভাবে প্রকাশ করব?


13

আমি পোর্টেইনার ব্যবহার করছি এবং দূরবর্তী শেষ পয়েন্টগুলি পরিচালনা করতে অক্ষম। দূরবর্তী ডকার নোডগুলিতে সংযোগের জন্য আমি কমান্ড লাইনটি ব্যবহার করার চেষ্টা করেছি, তবে একটি বার্তা পেয়েছি Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running?

হ্যাঁ, তারা চলছে। আমি নিজেকে ডকার গ্রুপে যুক্ত করেছি এবং নোডগুলিতে এসএসএইচিংয়ের মাধ্যমে ডকার অ্যাক্সেস করতে পারি। তবে আমি দূরবর্তীভাবে কোনও ডকার নোড অ্যাক্সেস করতে পারি না।

আমি সংশোধন /etc/default/ সংস্থান করতে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 info
Cannot 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 info
Cannot 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 info
Cannot 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

2375 শুনছেন? ss -ntl
jscott

না। 2375 তে কিছু শোনা যাচ্ছে না And এবং কোন ফাইলের মধ্যে কোন কনফিগারেশন এটি প্রভাবিত করে তা আমি বুঝতে পারি না। ps auxযদি এটি সাহায্য করে তবে আমি আমার উত্তরে আউটপুটটি অন্তর্ভুক্ত করেছি।
লর্ড লোহ

আমি অনুরূপ জিনিস চেষ্টা করেছিলাম এবং সন্দেহ করেছি যে ফাইল / ইত্যাদি / ডিফল্ট / ডকার, /etc/init/docker.conf এবং /etc/init.d/docker কেবল ডাবর-সিই ইনস্টল করে উবুন্টু 16.04 এ উপেক্ষা করা হয়েছে, যে কেউ নিশ্চিত করতে পারে ? আমি মনে করি যখন আমি "সার্ভিস ডকারের স্থিতি" চালাই তখন যা ঘটেছিল তা হ'ল "সিস্টেমটেক্টল স্ট্যাটাস ডকার", এটি একটি সম্পূর্ণ অন্যান্য পরিচালনা ব্যবস্থা।
ক্রিসিনমটাউন

উত্তর:


22

ইভান ক্রিজসানের পোস্টের জন্য আমি একটি সমাধান পেয়েছি ।

/lib/systemd/system/docker.serviceলাইনটি সংশোধন করতে আমাকে আমার উবুন্টু 16.04.2 এলটিএস সিস্টেমে সম্পাদনা করতে হয়েছিল

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

তারপর

sudo systemctl daemon-reload
sudo systemctl restart docker.service

এবং সবকিছু কাজ করেছে :-)। পরবর্তী পদক্ষেপটি কীভাবে ডকার ডেমন ফর্মটি হাইজ্যাক করা হচ্ছে তা রক্ষা করতে হবে figure


1
আমি নিশ্চিত করি যে এই পরিবর্তন ডকার্ডকে উবুন্টু 16.04-তে ডকার-সিএআর ভেরি 17.06 সহ এইচটিটিপি অনুরোধগুলি শোনার কারণ করে। কেবলমাত্র পরিষেবা স্ক্রিপ্টটি সরাসরি সংশোধন করা ভুল বলে মনে হচ্ছে।
ক্রিসিনমটাউন

7
ডকার পরিষেবা স্ক্রিপ্ট (বা কোনও পরিষেবা স্ক্রিপ্ট) কখনই সরাসরি সম্পাদনা করবেন না। সিস্টেমেডে একটি পৃথক সম্পাদনা বৈশিষ্ট্য অন্তর্নির্মিত রয়েছে Use ব্যবহার systemctl edit docker.serviceএবং systemctl আপনার সম্পাদনাগুলি সহ একটি নতুন ফাইল তৈরি করবে। এটি আপনার পরিবর্তনগুলি মুছে ফেলা থেকে একটি আপডেটকে বাধা দেয়। সিস্টেম টাইম দুটি রানটাইমের সময় একীভূত করবে। এখানে ভাল নথি:
ডিজিটালওসন

ধন্যবাদ! এটি মারাত্মকভাবে কার্যকর। আপডেটের সময় আমি সতর্কতা পেতে থাকি। আমি এটি খতিয়ে দেখব: _)
লর্ড লোহ।

4
উবুন্টু সার্ভার 18.04 এ, এটি এর মতো কাজ করেছে:ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:4243
লুসিয়ান আলেক্সা

যখন আমি ব্যবহার -H tcp://নিজে সেটিং ছাড়া -H fd://সেটিং, আমি সমস্যা এবং করতে ক্লায়েন্ট কমান্ড, যেমন .., Docker তথ্য, Docker সংস্করণ, ইত্যাদি
ক্রিস এফ

2

/ ইত্যাদি / ডিফল্ট ডিরেক্টরিটি যেখানে বিতরণ রক্ষণাবেক্ষণকারীরা তাদের কনফিগারেশন ফাইলগুলি রাখেন put আপনি যদি ডকারের সংগ্রহস্থলগুলি থেকে সরাসরি ডকার ইনস্টল করেন তবে এই ডিরেক্টরিটি ব্যবহার করা হবে না।

/ Lib / systemd ডিরেক্টরিটি হল যেখানে প্যাকেজগুলি তাদের systemd ফাইলগুলি ইনস্টল করবে এবং তারা সেখানে আপগ্রেড করার সময় যে কোনও পরিবর্তন মুছে ফেলবে। আপনি যদি এটি ব্যবহার করেন তবে আপনার পরিবর্তনগুলি নষ্ট হবে।

অবিচলিত একটি সিস্টেমযুক্ত ইউনিট ফাইলে আপনার নিজস্ব পরিবর্তন করতে, আপনি /etc/systemd/system/docker.service.d/ এ একটি ইউনিট ফাইল তৈরি করতে পারেন, যেমন আমার মান /etc/systemd/system/docker.service। ডি / override.conf:

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

এই ওভাররাইডটি কেবল কমান্ড লাইনের সমস্ত ফ্ল্যাগই সিস্টেমড থেকে ডকার্ড ডিমনকে আনসেট করে। একবার হয়ে গেলে আপনি /etc/docker/daemon.json থেকে প্রতিটি সেটিং ওভাররাইড করতে পারেন যা ডকার দ্বারা ব্যবহৃত হয় এবং সেটিংসের উপর নির্ভর করে ডিমন পুনরায় চালু না করে পুনরায় লোড করা যায়। উদাহরণস্বরূপ এখানে একটি উদাহরণ /etc/docker/daemon.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/


1
একটি খুব ভাল উত্তর যা ডকার পরিষেবাতে ভবিষ্যতের আপডেটগুলি টিকে থাকবে। এটি করার সঠিক উপায় এটি।
ফোপেডুশ

2

আপনি যদি নিজের ডকার ডেমনটিকে পুনরায় কনফিগার করতে এবং পুনরায় চালু করতে না চান তবে আপনি ইউনিক্স সকেট টিসিপি সকেটে ncat( nmapপ্যাকেজ থেকে ) ব্যবহার করে ব্রিজ করতে পারেন :

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

বিকল্প হিসাবে, আপনি সকেট বা অন্যান্য সরঞ্জাম ব্যবহার করতে পারেন ।


আশ্চর্যজনক! আমি কি এই আদেশটি পটভূমিতে রেন্ড করতে পারি? যখন আমি বন্ধ করি তখন আমার টার্মিনাল সংযোগটি হারিয়ে যায়
ফেলিক্স

আহ আমি খুঁজে পেয়েছি nohupএবং&
ফেলিক্স

0

একটি অফিসিয়াল ডকুমেন্টেশন রয়েছে যেখানে ডকার ডিমন সংযোগের জন্য শোনেন সেখানে কনফিগার করবেন কীভাবে তা বর্ণনা করে

সিস্টেমড বনাম ডেমন.জসন

সিস্টেমড ইউনিট ফাইল এবং ডেমন.জসন ফাইল উভয়ই সংযোগের জন্য শোনার জন্য ডকারকে কনফিগার করা একটি দ্বন্দ্ব সৃষ্টি করে যা ডকারকে শুরু হতে বাধা দেয়।

সিস্টেমড ইউনিট ফাইল সহ দূরবর্তী অ্যাক্সেস কনফিগার করা

  1. পাঠ্য সম্পাদকের মধ্যে ডকার.সার্ভেসের জন্য ওভাররাইড ফাইল খোলার জন্য sudo systemctl edit docker.service কমান্ডটি ব্যবহার করুন।

  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 dockerd
    tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
    

এর সাথে দূরবর্তী অ্যাক্সেস কনফিগার করছে daemon.json

  1. ইউএনআইএক্স সকেট এবং একটি আইপি ঠিকানার সাথে সংযোগের জন্য /etc/docker/daemon.json এ হোস্টগুলি অ্যারেটি সেট করুন:

    {
    "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 dockerd
    tcp        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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.