পোর্ট বাইন্ডিংয়ের জন্য ডকার ব্যবহার আইপিভি 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.