পোর্ট বাইন্ডিংয়ের জন্য ডকার ব্যবহার আইপিভি 4 করুন


104

আমার ডকার হোস্ট আছে এবং ভিতরে আমার কাছে একটি ধারক রয়েছে।

ডকার হোস্ট পোর্টটি কেবলমাত্র IPv6 ইন্টারফেসে আবদ্ধ করছে, আইপিভি 4-তে নয়।

এটি আউটপুট

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:55082           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -
tcp6       0      0 :::80                   :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::40280                :::*                    LISTEN      -
tcp6       0      0 :::5432                 :::*                    LISTEN      -
tcp6       0      0 :::40122                :::*                    LISTEN      -
tcp6       0      0 :::36378                :::*                    LISTEN      -
tcp6       0      0 :::40543                :::*                    LISTEN      -
tcp6       0      0 :::111                  :::*                    LISTEN      -

কনটেইনার 22 পোর্টের সাথে লিঙ্ক করার জন্য এখন আমার কাছে 40122 বন্দর রয়েছে।

আমি সেই ধারকটিতে এসএসএইচ করতে চাই তবে আমি কেবলমাত্র আইপিভি 6 এর সাথে আবদ্ধ হতে পারছি না

এটি আমার ডকার সংস্করণ Docker version 1.5.0, build a8a31ef

docker ps

201bde6c839a        myapp:latest   "supervisord -n"    3 weeks ago         Up 2 hours          0.0.0.0:40122->22/tcp, 0.0.0.0:40280->80/tcp, 0.0.0.0:40543->443/tcp   myapp

আমি ছুটে এসেছি docker run -d -P -p 40122:22

netstat -tlna

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3031          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::6379                 :::*                    LISTEN

পিএস অক্স

root         1  0.0  0.8  52440 16668 ?        Ss   00:53   0:03 /usr/bin/python /usr/bin/supervisord -n
root        49  0.0  0.1  17980  3048 ?        S    01:32   0:00 bash
root        64  0.0  0.1  46632  2712 ?        S    01:32   0:00 su -l vagrant
vagrant     65  0.0  0.1  21308  3760 ?        S    01:32   0:00 -su
root       288  0.0  0.1  17980  3088 ?        S    02:01   0:00 bash
root       304  0.0  0.1  46632  2720 ?        S    02:01   0:00 su -l vagrant
vagrant    305  0.0  0.1  21304  3804 ?        S    02:01   0:00 -su
vagrant    308  0.0  3.7 429616 75840 ?        Sl+  02:01   0:05 python ./manage.py shell_plus
root       654  0.0  0.4  47596  9848 ?        S    03:12   0:01 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       655  0.0  0.3  90280  7732 ?        S    03:12   0:00 nginx: master process /usr/sbin/nginx
www-data   656  0.0  0.1  90600  3624 ?        S    03:12   0:00 nginx: worker process
www-data   657  0.0  0.1  90600  3624 ?        S    03:12   0:00 nginx: worker process
www-data   658  0.0  0.1  90600  3624 ?        S    03:12   0:00 nginx: worker process
www-data   659  0.0  0.2  90940  4500 ?        S    03:12   0:00 nginx: worker process
root       660  0.0  0.2  61372  5332 ?        S    03:12   0:00 /usr/sbin/sshd -D
root       669  0.0  0.4  37004  8892 ?        Sl   03:12   0:01 redis-server *:6379
root       856  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       857  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       858  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root       859  8.0  2.8 388720 57792 ?        Sl   04:07   0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
vagrant    889  0.0  0.1  18692  2508 ?        R+   04:11   0:00 ps aux

ধারকটি শুরু করতে আপনি কোন আদেশ ব্যবহার করেছেন? docker psকনটেইনারটি কখন চলমান রয়েছে তার ফলাফলও পোস্ট করুন
ড্যানিয়েল টি।

আপনি কি নিশ্চিত করতে পারেন যে sshd আসলে ধারকটিতে চলছে? চালান docker exec -ti 201bde6c839a /bin/bash, একবার আপনি আছে, আউটপুট পোষ্ট ps aux এবংnetstat -taln
ড্যানিয়েল টি।

আমার ডকার হোস্টে, সমস্ত ডকার বন্দরগুলি আইপিভি 6 এ শুনছে এবং ধারকগুলিতে এসএসএসের সাথে সংযোগ স্থাপন করতে কোনও সমস্যা নেই।
ড্যানিয়েল টি।

@ ড্যানিয়েল্ট আমি তথ্য যোগ করেছি। আমি এক্সিকিউটিভ ব্যবহার করে এসএসএস করতে সক্ষম তবে ম্যাক থেকে হোস্ট পোর্ট 40122 ব্যবহার করে বাইরে থেকে সরাসরি কনটেইনারে প্রবেশ করতে সক্ষম নই
ইউজার 3214546

আপনি github.com/docker/docker/issues/2174 এই সমস্যাটিকে আঘাত করতে পারেন , আমি নিশ্চিত না এটির সমাধান হয়েছে কিনা। আপনি কীভাবে ssh এর মাধ্যমে সংযোগের চেষ্টা করছেন এবং যে ত্রুটিটি পাচ্ছেন তাও আপনি কী ভাগ করে নিতে পারেন?
ড্যানিয়েল টি।

উত্তর:


77

যেমন @ ড্যানিয়েল-টি মন্তব্যে উল্লেখ করেছেন: github.com/docker/docker/issues/2174 কেবলমাত্র আইপিভি 6-তে বাঁধাই দেখানোর বিষয়ে netstat, তবে এটি কোনও সমস্যা নয়। যেমন গিথুব ইস্যুতে বলা হয়েছে:

প্রক্সি স্থাপন করার সময়, ডকার লুপব্যাক ঠিকানা '127.0.0.1' র অনুরোধ করে, লিনাক্স বুঝতে পারে এটি একটি ঠিকানা যা আইভিভি 6-তে উপস্থিত রয়েছে (যেমন :: 0) এবং উভয়টিতে খোলে (তবে এটি আনুষ্ঠানিকভাবে একটি আইপিভি 6 সকেট)। আপনি যখন নেটস্যাট চালাবেন এটি এটি দেখে এবং আপনাকে এটি একটি আইপিভি 6 বলে tells তবে এটি এখনও আইভিভি 4 এ শুনছে। আপনি যদি আপনার সেটিংসের সাথে কিছুটা খেলেন তবে আপনি নেট.আইপিভি 6.bindv6only = 1 সেট করে লিনাক্স এই কৌশলটি অক্ষম করতে পারেন।

অন্য কথায়, আপনি এটিকে কেবলমাত্র আইভিভি 6 হিসাবে দেখেন, এটি এখনও IPv4- তে যোগাযোগ করতে সক্ষম হয় যদি না আপনি আইপিভি 6 কেবল নেট.আইপিভি 6.bindv6only সেটিং দিয়ে আইপিভি 6-তে বাঁধাই করতে পারেন set পরিষ্কার হতে, নেট.ipv6.bindv6 মাত্র 0 হওয়া উচিত - আপনি sysctl net.ipv6.bindv6onlyযাচাই করতে চালাতে পারেন।


5
এটি আসলে একটি বড় সমস্যা। অ্যাজুরের মতো পাবলিক ক্লাউড, আইপিভি 6 খুব ভাল কথা বলে না, উদাহরণস্বরূপ পাবলিক অ্যাজুরে লোড-ব্যালেন্সার ব্যাকএন্ড হিসাবে আইপিভি 4 চেষ্টা করছে।
থমাস ডেকাউস

4
দেখে মনে হচ্ছে আপনার আজুুরে "ডকার ভিএম এক্সটেনশন" ইনস্টল করতে হবে এবং উবুন্টু 14.04 এলটিএস ব্যবহার করতে হবে। যাইহোক, আমি মনে করি না আইপিভি 6 এর সাথে কোনও সমস্যা আছে কারণ এটি কেবল স্থানীয় হোস্টেই রয়েছে, নেটওয়ার্ক নয়।
মাইকেল

আপনি ঠিক বলেছেন, সমস্যাটি আমার কনফিগারেশনে ছিল (আইপিভি 6 অক্ষম করা ভাল ধারণা নয় ^^)
টমাস ডেকাক্স

4
@ বিগডং আপনি আইপিভি 6 চালু করতে চান।
মাইকেল

4
@ মিশেল আপনি আমার টাইমসভার :)
lv0gun9

6

সেটিংটি net.ipv6.conf.all.forwarding=1সমস্যার সমাধান করবে।

এটি ব্যবহার করে একটি লাইভ সিস্টেমে করা যেতে পারে sudo sysctl -w net.ipv6.conf.all.forwarding=1


এই উত্তরের একটি সুবিধা রয়েছে: এটি আপনাকে ডকার ডেমন পুনরায় আরম্ভ না করেই সমস্যাটি "ঠিক" করতে দেয় (নীচে ডকার কনফিগারেশনের পরিবর্তে উত্তরটি দেয়)। শীর্ষ, নির্বাচিত উত্তর সম্পর্কে: আমি আসলে sysctl net.ipv6.bindv6only=0এই কনফিগারেশনটি পরিবর্তন করেছিলাম তবে কোনও লাভ হয়নি।
pkoperek

2

ডিফল্টরূপে, ডকার AFDPET6 সকেট ব্যবহার করে যা আইপিভি 4 এবং আইপিভি 6 সংযোগের জন্য ব্যবহার করা যেতে পারে। এটি শোনার ঠিকানার জন্য নেটস্পটকে একটি আইপিভি 6 ঠিকানার প্রতিবেদন করে।

রেডহ্যাট https://access.redhat.com/solutions/3114021 থেকে


2

সমস্যা সমাধান :

ব্যবহার করুন docker run -it -p 80:80 --name nginx --net=host -d nginx

এই সমস্যাটি আমরা ব্রিজ নেটওয়ার্কের পরিবর্তে হোস্টের সাথে চেষ্টা করব যা আপনার পক্ষে কার্যকর হবে some

tcp     0    0 0.0.0.0:80            0.0.0.0:*             LISTEN      - 
tcp6    0    0 :::80                 :::*                  LISTEN      -  

0

আপনি যদি চান যে আপনার ধারক বন্দরগুলি আপনার আইপিভি 4 ঠিকানায় আবদ্ধ করতে পারে, ঠিক:

  • সেটিংস ফাইলটি সন্ধান করুন
    • / etc / sysconfig / ডকার-নেটওয়ার্ক একইভাবে রেডহ্যাট
    • / ইত্যাদি / ডিফল্ট / ডকার-নেটওয়ার্ক একইভাবে দেবিয়ান উত্তরগুলিতে
  • নেটওয়ার্ক সেটিংস সম্পাদনা করুন
    • DOCKER_NETWORK_OPTIONS = -ip = xx.xx.xx.xx যোগ করুন
    • xx.xx.xx.xx আপনার আসল আইপিভি 4 (এবং 0.0.0.0 নয়)
  • ডকার ডিমন পুনরায় চালু করুন

আমার জন্য ডক 1.9.1 এ কাজ করে


4
এই ডেবিয়ান উপর কাজ করে? এটি / ইত্যাদি / ডিফল্ট / ডকার হওয়া উচিত নয়?
দিমিত্রি কোপ্রিভা

4
@ বিগডং এই মন্তব্যের জন্য ধন্যবাদ, আমি ওএসের মতো রেডহ্যাটে আছি তাই পথটি একটি ওএস থেকে অন্যরকমের চেয়ে অন্যরকম, আমি উত্তরে আপনার মন্তব্যটি প্রতিবিম্বিত করার চেষ্টা করেছি
সিলওয়াইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.