আমাকে এই একই সমস্যাটি মোকাবেলা করতে হয়েছিল এবং আমার কোনও চলমান ধারক না থামিয়ে সমাধান করতে সক্ষম হয়েছি। এটি ডকারের ১.৯.১ ব্যবহার করে ফেব্রুয়ারী ২০১ 2016 পর্যন্ত আপ টু ডেট সমাধান। যাইহোক, এই উত্তরটি @ রিকার্ডো-ব্র্যাঙ্কোর জবাবের বিশদ সংস্করণ, তবে নতুন ব্যবহারকারীদের জন্য আরও গভীরতায়।
আমার দৃশ্যে, আমি একটি পাত্রে চলমান মাইএসকিউএলটির সাথে সাময়িকভাবে সংযোগ স্থাপন করতে চেয়েছিলাম এবং যেহেতু অন্যান্য অ্যাপ্লিকেশন পাত্রে এটির সাথে যুক্ত রয়েছে, বন্ধ করা, পুনর্নির্মাণ করা এবং ডাটাবেস ধারকটি পুনরায় চালানো একটি অ-স্টার্টার ছিল।
যেহেতু আমি বাহ্যিকভাবে মাইএসকিউএল ডাটাবেস অ্যাক্সেস করতে চাই (সিকুয়েল প্রো থেকে এসএসএইচ টানেলিংয়ের মাধ্যমে), তাই আমি 33306
হোস্ট মেশিনে পোর্ট ব্যবহার করতে যাচ্ছি । (না 3306
, কেবল কোনও ক্ষেত্রে বাহ্যিক মাইএসকিউএল ইনস্ট্যান্স চলছে))
প্রায় এক ঘন্টা টুইট করার জন্য iptables ফলহীন প্রমাণিত হয়েছে, যদিও:
ধাপে ধাপে, আমি যা করেছি তা এখানে:
mkdir db-expose-33306
cd db-expose-33306
vim Dockerfile
এডিট করুন dockerfile
, এটি ভিতরে রেখে:
# Exposes port 3306 on linked "db" container, to be accessible at host:33306
FROM ubuntu:latest # (Recommended to use the same base as the DB container)
RUN apt-get update && \
apt-get -y install socat && \
apt-get clean
USER nobody
EXPOSE 33306
CMD socat -dddd TCP-LISTEN:33306,reuseaddr,fork TCP:db:3306
তারপরে ছবিটি তৈরি করুন:
docker build -t your-namespace/db-expose-33306 .
তারপরে আপনার চলমান ধারকটির সাথে যুক্ত হয়ে এটি চালান। ( স্পষ্টভাবে বন্ধ হওয়া এবং অপসারণ না হওয়া পর্যন্ত এটি পটভূমিতে রাখার -d
পরিবর্তে ব্যবহার করুন -rm
I আমি কেবল এটি চাই যে এটি এই ক্ষেত্রে সাময়িকভাবে চলমান))
docker run -it --rm --name=db-33306 --link the_live_db_container:db -p 33306:33306 your-namespace/db-expose-33306