Docker একটি নেটওয়ার্ক তৈরি করতে অস্বীকার করে এই বার্তা দিয়ে যে পুলটি এই ঠিকানা-স্পেসে অন্যটির সঙ্গে ওভারল্যাপ করছে, আর কেউ সিদ্ধান্ত নেয় যে VPN রুটই এর কারণ হতে হবে। তা হতে পারে না। ওই ত্রুটিটি তৈরি হয় যখন একটি পুল বরাদ্দ করা হচ্ছে, একটি প্যাকেটও তৈরি হওয়ার আগেই, এবং একটি হাতে লেখা কার্নেল রুটের সঙ্গে এর কোনো সম্পর্ক নেই। VPN গুরুত্বপূর্ণ হয় এক ধাপ পরে, যখন ইতিমধ্যে ঠিকানা থাকা একটি কনটেইনার একটি রুট আবির্ভূত হওয়ার পর আর পৌঁছানো যায় না। দুটি সমস্যা, দুটি প্রমাণের সেট, আর এগুলো মিশিয়ে ফেললে এমন একটি পরিবর্তন আসে যা কোনোটিই সারায় না।

একই রকম দেখতে দুটি ত্রুটি

বরাদ্দের ত্রুটিটি পাটিগণিত। Docker আপনার চাওয়া সাবনেটের সঙ্গে এটি ইতিমধ্যে পরিচালনা করা সাবনেটগুলোর তুলনা করে, একটি ছেদ খুঁজে পায় এবং অস্বীকার করে। তখনও কিছু চলছে না, তাই কোনো রুট নেই, কনটেইনার নেই, পরীক্ষা করার ট্রাফিকও নেই।

রানটাইম উপসর্গটি পৌঁছানোর প্রশ্ন। গতকাল উত্তর দেওয়া একটি কনটেইনার এখন উত্তর দেয় না, এবং হোস্টের রাউটিং টেবিলে কিছু বদলে গেছে। কনটেইনারটি এখনও তার ঠিকানা ধরে রেখেছে; প্রশ্ন হলো সেই ঠিকানাটি কোন পথ নেয়।

দুটোই ঠিকানা-পরিকল্পনার সমস্যা। এর মধ্যে কেবল একটি Docker-এর সমস্যা।

প্রথমে বরাদ্দ করা পুলগুলো পড়ুন

নেটওয়ার্কগুলো তালিকাভুক্ত করুন এবং যেগুলো ছেদ করতে পারে সেগুলো পরীক্ষা করুন। সাবনেটটি IPAM কনফিগারেশনে থাকে, আর সংযুক্ত কনটেইনারগুলো আলাদাভাবে তালিকাভুক্ত থাকে:

docker network ls
docker network inspect EXISTING_NETWORK

সেই সাবনেটকে নতুন নেটওয়ার্ক যে পুল চায় তার সঙ্গে তুলনা করুন, এবং মনে রাখুন Compose প্রতি প্রজেক্টে নিজস্ব ডিফল্ট নেটওয়ার্ক তৈরি করে। যে প্রজেক্টের কথা আপনি ভুলে গেছেন তার সঙ্গে সংঘাত ডেমন-এর সঙ্গে সংঘাতের মতোই দেখায়।

একটি সার্ভিসে স্ট্যাটিক ipv4_address হলো একটি কনটেইনারের ঠিকানা, পুলের সংজ্ঞা নয়। এটি বদলালে ওভারল্যাপ দূর হয় না, কারণ ওভারল্যাপ নেটওয়ার্ক সাবনেটগুলোর মধ্যে, কনটেইনারগুলোর মধ্যে নয়। Docker-এর network-create রেফারেন্স সাধারণ ব্রিজ বরাদ্দের জন্য অ-ওভারল্যাপিং সাবনেট দাবি করে এবং কীভাবে একটি স্পষ্টভাবে বাছতে হয় তা নথিভুক্ত করে।

VPN আতিক্রম করে টিকে থাকা প্রিফিক্স বাছুন

তাৎক্ষণিক সংঘাত ও ভবিষ্যতের রুট একই পছন্দে নির্ধারিত হয়, তাই এটি একবারই করুন। প্রার্থিত রেঞ্জটি LAN-এর সঙ্গে, হোস্ট যে প্রতিটি VPN গন্তব্যে পৌঁছাতে পারে তার সঙ্গে, এবং ব্যবহৃত অন্য যেকোনো overlay-এর সঙ্গে তুলনা করুন।

যে প্রিফিক্স Docker-কে সন্তুষ্ট করে অথচ দূরবর্তী নেটওয়ার্কের সঙ্গে সংঘর্ষ করে, তা আপনাকে এমন একটি কনটেইনার দেয় যা পরিষ্কারভাবে চালু হয় এবং টানেল ওঠার মুহূর্তেই অপ্রাপ্য হয়ে যায়। এটিই এই নিবন্ধের দ্বিতীয় ত্রুটি, আর এখন এড়িয়ে যাওয়ার চেয়ে পরে এটি নির্ণয় করা অনেক কঠিন।

বেছে নেওয়া রেঞ্জগুলো এমন জায়গায় লিখে রাখুন যেখান থেকে পরবর্তী প্রজেক্ট সেগুলো পড়তে পারে। বরাদ্দ করা প্রিফিক্সের এক-লাইনের রেজিস্টার ব্যাখ্যাহীন টাইমআউটের এক সপ্তাহের চেয়ে সস্তা।

নেটওয়ার্ক ইচ্ছাকৃতভাবে অবসর দিন বা বদলান

নতুন Compose নেটওয়ার্কের জন্য, নেটওয়ার্কের IPAM কনফিগারেশনে অব্যবহৃত প্রিফিক্স সেট করুন। বিদ্যমান প্রজেক্টের জন্য, পুনঃসংখ্যায়ন পরিকল্পনা করুন: স্থির ঠিকানা, নির্ভরশীল সার্ভিস এবং নেটওয়ার্ক পুনঃনির্মাণের ধাপ—সবই হিসাবে আনতে হবে, কারণ YAML সম্পাদনা চলমান নেটওয়ার্ককে পুনঃসংখ্যায়িত করে না।

যদি কোনো অপ্রচলিত নেটওয়ার্ক সংঘর্ষকারী বরাদ্দের মালিক হয়, সরানোর আগে দেখুন কে সংযুক্ত। docker network rm সক্রিয় endpoint থাকা পর্যন্ত অস্বীকার করে, আর docker stop নেটওয়ার্কের নাম নয়, কনটেইনারের নাম বা ID নেয়। একটি কনটেইনার থামানোও পুল ধরে রাখা নেটওয়ার্ক সংজ্ঞাটি সরায় না।

বিস্তৃত prune কোনো নির্ণয়ের হাতিয়ার নয়। এটি সম্পর্কহীন প্রজেক্টে পৌঁছায় এবং আপনি যে প্রমাণ সংগ্রহ করতে যাচ্ছিলেন তা ধ্বংস করে।

ডিফল্ট পুল শুধু পরের বরাদ্দে সাহায্য করে

ডেমন-এর ডিফল্ট ঠিকানা পুল সেটিং ভবিষ্যতের স্বয়ংক্রিয় বরাদ্দগুলোকে আপনার সংরক্ষিত রেঞ্জের বাইরে রেখে উন্নত করে। এটি ইতিমধ্যে বিদ্যমান নেটওয়ার্কগুলোকে পিছিয়ে গিয়ে পুনঃঠিকানা দেয় না, এবং অন্য একটি স্পষ্ট সাবনেটের সঙ্গে ওভারল্যাপ করা স্পষ্ট সাবনেট সমাধান করে না।

ওই সেটিংকে নিজস্ব রিস্টার্টসহ আলাদা, পরিকল্পিত পরিবর্তন হিসেবে দেখুন, এক প্রজেক্ট মেরামতের অংশ হিসেবে নয়। দুটো মিশিয়ে ফেলার মানে হলো ডেমন রিস্টার্ট একটি অসম্পর্কিত তদন্তের মাঝখানে পড়ে। এটির নিজস্ব সময়সূচিতে রাখুন। তারপর নিশ্চিত করুন একটি নতুন স্বয়ংক্রিয় বরাদ্দ সত্যিই আপনার সংরক্ষিত রেঞ্জের বাইরে পড়েছে।

তৈরি সফল হওয়ার পর, প্রকৃতপক্ষে চলমান সাবনেট যাচাই করুন এবং তারপর VPN-কে তার অভীষ্ট অবস্থায় রেখে একটি বাস্তব অ্যাপ্লিকেশন অনুরোধ করুন। যদি পুলটি বৈধ হয় আর অ্যাক্সেস এখনও ব্যর্থ হয়, তবে বাকি কাজ হলো রুট নির্বাচন, ফিল্টারিং এবং ফেরার পথ। এটি একটি রানটাইম তদন্ত, এবং এটি বরাদ্দের ত্রুটিকে পিছিয়ে গিয়ে অর্থহীন করে তোলে না।

কাজের ক্রম: বরাদ্দ করা পুলগুলো পড়ুন, এমন প্রিফিক্স বাছুন যা Docker ও VPN গন্তব্য দুটোই এড়ায়, নেটওয়ার্ক ইচ্ছাকৃতভাবে পুনঃতৈরি করুন, তারপর টানেল ওঠা অবস্থায় একটি অনুরোধ পরীক্ষা করুন।

সম্পর্কিত নিবন্ধ