ডকার + ব্রিজ + ডিএইচসিপি


13

আমার কাছে প্রচুর ডকার পাত্রে রয়েছে যেগুলি তাদের হোস্টগুলির মতো একই ল্যানে আমার ঠিকঠাক প্রয়োজন। এখন অবধি, আমি একটি সেতু স্থাপন করে এবং ম্যানুয়ালি সেগুলিকে আইপি বরাদ্দ করে এবং আইপি নিজেই পরিচালিত করে এটি অর্জন করেছি। একটি উদাহরণ শুরু যেমন হবে:

docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]

হোস্টের সাথে সেতুটি /etc/network/interfaces(উবুন্টু) এর মতো সংজ্ঞায়িত হয়েছে :

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.254
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

যেহেতু আমি সার্ফটি আবিষ্কার করেছি , আমি কনটেইনারগুলির মধ্যে স্বয়ংক্রিয় আবিষ্কার ব্যবহারের দিকে এগিয়ে যাওয়ার চেষ্টা করছি, যাতে ডিএইচসিপি আইপিগুলিকে ট্র্যাক রাখতে পারে এবং সেগুলি পাত্রে রাখে। আমি তখন থেকে স্টার্টআপ কমান্ডটি এতে পরিবর্তন করেছি:

docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/bin/bash

এবং ব্রিজ:

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

এর ফলে কনটেইনারটি শুরু হয়েছিল, তবে আইপি নেই। তারপরে আমি একটি অনলাইন পোস্টের কাছ থেকে পরামর্শ নিয়েছিলাম যিনি ফেডোরার সাথে ফোন করে এটি সম্পন্ন করতে সক্ষম হন dhclient। দুর্ভাগ্যক্রমে উবুন্টু ভিত্তিক পাত্রে এটি আমার পক্ষে কাজ করছে না।

নীচে নীচের ত্রুটি বার্তাগুলি আমি বিভিন্ন শর্তে পেয়েছি:

  • dhclientআমি যখন --privilegedধারক শুরু করতে সক্ষম হয়েছি তখন চলছে :

    dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
    
  • চলমান sudo dhclient eth0যখন না--privileged

    RTNETLINK answers: Operation not permitted
    mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
    
  • চলমান sudo dhclientবা dhclient(কোনও ইন্টারফেস নির্দিষ্ট করা হয়নি)।

    অবিলম্বে ফিরে আসে এবং এখনও কোনও আইপি বা নেটওয়ার্ক সংযোগ নেই।

আমি কীভাবে তাদের হোস্টগুলির মতো একই সাবনেট থেকে ডায়নামিক আইপিগুলি ধরতে ডকার পাত্রে পেতে পারি, যেমন আমি আইপি ট্র্যাক না করে একাধিক হোস্টে ধারক স্থাপন করতে পারি?

অতিরিক্ত তথ্য

  • চলমান DOCKER_OPTS="-e lxc"/etc/default/docker
  • হোস্ট হ'ল উবুন্টু 14.04
  • from ubuntu:14.04ডকফেরিল ব্যবহার করে ডকার পাত্রে তৈরি করা হয়।

উত্তর:


3

দেখা যাচ্ছে যে এটি একটি উন্মুক্ত সমস্যা এবং এটি উবুন্টু ধারক এবং অ্যাপারমোরের সাথে নির্দিষ্ট।

বিপ্রোডোহেল থেকে সেখানে একটি কর্মশালা পোস্ট করা হয়েছিল:

  • সুবিধাযুক্ত হিসাবে ধারকটি শুরু করুন --privileged
  • ডকফাইফিলের সাথে নিম্নলিখিত লাইনটি যুক্ত করুন: RUN mv /sbin/dhclient /usr/sbin/dhclient
  • চালান dhclient eth0এবং আপনি ত্রুটি বার্তাটি দেখতে পাবেন: mv: cannot move '/etc/resolv.conf.dhclient-new.29' to '/etc/resolv.conf': Device or resource busyতবে আপনার এখন একটি আইপি থাকবে এবং আপনি নেটওয়ার্কটি ব্যবহার করতে পারবেন।

এটি আমার মামলার জন্য কবজির মতো কাজ করে, তবে কেন এমভি দরকার? আপনি দয়া করে ব্যাখ্যা করতে পারেন?
ফেডেরিকো বোনেলি

লোকটি পোস্ট করা সমাধানে এটি ছিল (যা আমি লিঙ্ক করেছি) এবং এটি কাজ করে বলে মনে হচ্ছে। সম্ভবত অন্য কেউ ব্যাখ্যা করতে পারেন।
প্রোগ্রামার 12

1
@ ফেডেরিকো বোনেলি: অ্যাপারমার তার দ্বারা পরিচালিত অ্যাপ্লিকেশনগুলিতে সুরক্ষা বিধিনিষেধ প্রয়োগ করে। এটি কেবলমাত্র অ্যাপ্লিকেশন পরিচালনা করে যার জন্য এটির নীতি সংজ্ঞা রয়েছে। এই নীতিগুলি তাদের পথে ভিত্তিক অ্যাপ্লিকেশনগুলির সাথে মেলে। যখন আপনি স্থানান্তর dhclientথেকে /sbinথেকে /usr/sbinApparmor নীতি সংজ্ঞা আর মেলে না এবং Apparmor এই "অজানা" আবেদন কোনো নিরাপত্তা নিষেধাজ্ঞা প্রযোজ্য হবে না।
পেপ্রিকা 9

কাজের সূচনা না হওয়ায় আমাকে "sudo apparmor_parser -R /etc/apparmor.d/sbin.dhclient" অবলম্বন করতে হয়েছিল, এটি একটি উবুন্টু 14.04 ধারক ফাই ছিল। তবে উপরের ত্রুটি বার্তাটি দেখা গেছে এবং তারপরে একটি আইপি ঠিকানা বরাদ্দ করা হয়েছিল।
নিল ম্যাকগিল

1

আমি একটি স্ক্রিপ্ট পেয়েছি

https://github.com/jkrauska/tech-notes/blob/master/docker-dhclient.md

এটি আপনি যা চান ঠিক তেমন করে (প্রোগ্রামার দ্বারা উল্লিখিত কার্যবিধি)।

এমভি কমান্ডটি প্রয়োজন, কারণ যখন আপনি সুবিধাযুক্ত মোডে ডকারের ধারকটি চালাবেন তখন ডকারের ধারকগুলির জন্য অ্যাপআর্মার প্রোফাইলটি সংজ্ঞায়িত করা হবে না। সুতরাং মেশিন-ডিফল্ট অ্যাপআর্মার প্রোফাইল ব্যবহৃত হয় এবং এটি আপনাকে ডিফল্ট পথে dhclient চালানো থেকে বাধা দেয়।


1

আপনি যদি কোনও উবুন্টু ডকার পাত্রে কোনও ডিএইচসিপি ঠিকানা পেতে চাইছেন তবে নীচেরটি করুন:

  1. আপনার উপর ডকার ডিমন কমান্ড ডিএনএস বিকল্প সেট করুন ( --dns <my_dns_ip>)
  2. /etc/dhcp/dhclient.confলাইনটি খুলুন এবং সম্পাদনা করুন যা request subnet-mask, broadcast-address...শব্দগুলিকে ধারণ করে এবং মুছে ফেলবেdomain-name, domain-name-servers
  3. তারপরে আবেদন করার পরে service networking restartআপনি ত্রুটি বার্তা ছাড়াই একটি নতুন dhcp ঠিকানা পাবেন

-2

অন্য সম্ভাবনাটি হ'ল "পাইপওয়ার্ক" ব্যবহার করা। আপনার এটি আপনার ধারকটির বাইরে চালানো দরকার। https://github.com/jpetazzo/pipework


5
হাই এবং সাইটে আপনাকে স্বাগতম। আমরা উত্তরগুলি এখানে আরও বিস্তৃত হতে চাই। আপনি কি pipeworkএটি সম্পাদনা করতে এবং ব্যাখ্যা করতে পারেন, যেখানে এটির সন্ধান করতে পারে, এটি কীভাবে ইনস্টল করা যায়, সম্ভবত এর ব্যবহারের উদাহরণ দিতে পারেন? যেমনটি দাঁড়িয়েছে, আপনার উত্তর একটি মন্তব্য নয় উত্তর answer
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.