কোনও ডকারের ধারক থেকে হোস্ট ডাটাবেস অ্যাক্সেস করুন


131

যদি কিছু হোস্ট মেশিনে আমার একটি মাইএসকিএল ডাটাবেস থাকে এবং সেই হোস্টটি একটি ডকার পাত্রেও চালাচ্ছে: হোস্টে চলমান ডকারের ধারক থেকে আমি কীভাবে মাইএসকিএল ডাটাবেসটি অ্যাক্সেস করব??

উদাহরণস্বরূপ, কোনও পাত্রে হোস্ট পোর্ট প্রকাশের কোনও উপায় আছে (ডকার রান-পি কী বিপরীত হয়)?


1
মাইএসকিউএল সার্ভারটি যদি কোনও বন্দরে শুনছে তবে কনটেইনারটি অন্য কোনও ইন্টারনেট সংযোগের মতো সেই বন্দরের হোস্টের সাথে কেবল সংযোগ স্থাপন করতে পারে না?
jwodder

উত্তর:


87

এটি কীভাবে একটি সামঞ্জস্যপূর্ণ, ভালভাবে বোঝা যায় এবং বহনযোগ্য উপায়ে করা যায় সে সম্পর্কে বহু দীর্ঘস্থায়ী আলোচনা রয়েছে। কোনও সম্পূর্ণ সমাধান নয় তবে আমি আপনাকে নীচের আলোচনার সাথে যুক্ত করব link

যে কোনও ইভেন্টে আপনি অনেকে কন্টেইনারের / ইত্যাদি / হোস্ট ফাইলে হোস্টের আইপি ঠিকানা যুক্ত করতে ডকার চালানোর জন্য --add-host বিকল্পটি ব্যবহার করতে চান। সেখান থেকে যে কোনও প্রয়োজনীয় বন্দরে হোস্টের সাথে সংযোগ স্থাপন করা তুচ্ছ ial

একটি ধারক হোস্ট ফাইলটিতে এন্ট্রি যুক্ত করা হচ্ছে

আপনি এক বা একাধিক - অ্যাড-হোস্ট ফ্ল্যাগ ব্যবহার করে ধারকগুলির / ইত্যাদি / হোস্ট ফাইলগুলিতে অন্যান্য হোস্ট যুক্ত করতে পারেন। এই উদাহরণটি একটি হোস্টের নামে ডকার নামে একটি স্থির ঠিকানা যুক্ত করে:

 $ docker run --add-host=docker:10.180.0.1 --rm -it debian
    $$ ping docker
    PING docker (10.180.0.1): 48 data bytes
    56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
    56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
    ^C--- docker ping statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms

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

 $ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'"
 $ docker run  --add-host=docker:$(hostip) --rm -it debian

ডকুমেন্টেশন:

https://docs.docker.com/engine/reference/commandline/run/

ধারক থেকে হোস্ট অ্যাক্সেস নিয়ে আলোচনা:

https://github.com/docker/docker/issues/1143

https://github.com/docker/docker/issues/10023


এটি কি কোনও এনজিআইএনএক্স বিপরীত প্রক্সিটির পিছনে কাজ করবে ??
কেটি

89

18.03 ডক্স থেকে:

আমি একটি ধারক থেকে হোস্টের একটি পরিষেবাতে সংযোগ করতে চাই

হোস্টটির একটি পরিবর্তিত আইপি ঠিকানা রয়েছে (বা আপনার যদি কোনও নেটওয়ার্ক অ্যাক্সেস না থাকে তবে কিছুই নয়)। 18.03 এর পর থেকে আমাদের সুপারিশটি হল বিশেষ ডিএনএস নামের সাথে সংযোগ স্থাপন host.docker.internal, যা হোস্ট দ্বারা ব্যবহৃত অভ্যন্তরীণ আইপি ঠিকানার সাথে সমাধান করে।

গেটওয়েটি যেমন পৌঁছতে পারে তেমন gateway.docker.internal

উদাহরণ: আমি আমার হোস্টের মাইএসকিউএল উদাহরণটি অ্যাক্সেস করতে আমার ধারকটির ভিতরে আমার মাইএসকিউএল সংযোগের স্ট্রিংয়ের জন্য যা ব্যবহার করি তা এখানে:

mysql://host.docker.internal:3306/my_awesome_database

31
যেমনটি ইঙ্গিত: এটি এখন পর্যন্ত কেবল ম্যাক এবং উইনের জন্যই কাজ করে
flp

আপনি আমার দিনটি সংরক্ষণ করেছেন :)
আমজাদ

4
ভোট দিন। শুধু উত্তরের কারণে নয়, কারণ এটি উদাহরণের সাথে আপনার কীভাবে ব্যবহার করা উচিত।
গ্রানাডা কোডার

এটি অর্জনের জন্য আমি প্রায় 2 ঘন্টা ব্যয় করেছি, অনেক ধন্যবাদ thanks
আশীষ বাইনাদ

@Flp লিখেছেন তেমন কোনও লিনাক্স সমর্থন নেই, যারা আগ্রহী তাদের জন্য। এখানে গিথুব ইস্যু
গ্যালেটিনো

34

ডকার ১ 17.০6 এর পরে, ডকের পাত্রে একটি বিশেষ ম্যাক-অনলাইনে ডিএনএস নাম পাওয়া যায় যা হোস্টের আইপি ঠিকানার সমাধান করে। এইটা:

docker.for.mac.localhost

ডকুমেন্টেশনটি এখানে রয়েছে: https://docs.docker.com/docker-for-mac/netering/#httphttps-proxy-support


3
docker.for.mac.host.internalথেকে Docker 17.12.0 ceঅগ্রে। docs.docker.com/docker-for-mac/release-notes/...
Zangetsu

docker.for.mac.localhost উপর কাজ করে18.03.1-ce-mac65
cdignam

24

18.03 এর পরে ডকারের থেকে host.docker.intern ব্যবহার করুন ।


2
কিভাবে? আপনি কীভাবে এটি ব্যবহার করবেন তার একটি উদাহরণ দিতে পারেন?
danfromisrael

আপনি ডকারাইজড মাইএসকিএল চালান না কেন?
ইগোর ডি অলিভিয়র Sá

আমার জন্য কাজ করে নাDocker version 18.03.0-ce, build 0520e24
scythargon

@ আইগোরডিওলিভিরাá নিম্নলিখিত দৃশ্যের কল্পনা করুন, দেব পরিবেশে আপনার কাছে এমন কিছু ডাটাবেস রয়েছে যা 127.0.0.1:3306 শোনায় প্রোভেশন সম্পর্কে আপনার কাছে ডাটাবেস শোনার 127.0.0.1:3306, স্থানীয়ভাবে এটি স্থানীয় ডিবি, উত্পাদন এটি মেঘের প্রক্সি, আপনাকে হয় স্থানীয়ভাবে মাইএসকিএল ডকরিজ করুন এবং উত্পাদনের জন্য আর একটি সমাধান সন্ধান করুন, বা আপনি কেবল ডকার থেকে পোর্টে সংযোগ করতে পারেন, এটি উভয় ক্ষেত্রেই কাজ করবে
ড্রাচেনফেলস

1
docker.for.mac.localhost আমার জন্য কাজ করে18.03.1-ce-mac65
সিডিগনাম

21

অন্যান্য উত্তর আমার পক্ষে ভাল কাজ করেনি। আমার ধারকটি হোস্ট আইপি কে হোস্ট.ডোকার.ইনটার্নাল ব্যবহার করে সমাধান করতে পারেনি । দুটি উপায় আছে

  1. হোস্ট নেটওয়ার্ক ভাগ করে নেওয়া - নেট = হোস্ট:

    docker run -it --net=host  myimage
    
  2. ডকারের আইপি ঠিকানা ব্যবহার করা যা সাধারণত 172.17.0.1 । আপনি এটি ifconfig কমান্ড কল করে এবং ডকার ইন্টারফেসের ইনট অ্যাডারে ধরে এটি পরীক্ষা করতে পারেন

    user@ubuntu:~$ ifconfig
    docker0   Link encap:Ethernet  HWaddr 02:42:a4:a2:b2:f1  
      inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
      inet6 addr: fe80::42:a4ff:fea2:b2f1/64 Scope:Link
    

আপনার এই আইপি ঠিকানাটি একবার হয়ে গেলে, আপনি এটিকে ডকার চালানোর আর্গুমেন্ট হিসাবে পাস করতে পারেন এবং তারপরে প্রয়োগ করতে বা এটি করতে করতে, হোস্ট মেশিনের ডিরেক্টরিতে ভলিউমের মাধ্যমে jdbc.properties এর অবস্থান ম্যাপ করুন, যাতে আপনি ফাইলটি বাহ্যিকভাবে পরিচালনা করতে পারেন ।

  docker run -it -v /host_dir/docker_jdbc_config:${jetty_base}/var/config myimage

দ্রষ্টব্য: আপনার ডাটাবেসটি বাহ্যিক সংযোগগুলিকে মঞ্জুরি দেয় না। পোস্টগ্র্যাস্কিলের ক্ষেত্রে, আপনাকে এখানে এবং এখানে বর্ণিত হিসাবে 2 টি ফাইল সম্পাদনা করতে হবে :

  1. সমস্ত ঠিকানায় শোনার জন্য postgresql.conf সম্পাদনা করুন। ডিফল্টরূপে এটি লোকালহোস্টের দিকে নির্দেশ করবে।

    listen_addresses = '*'
    
  2. সমস্ত ঠিকানা থেকে সংযোগের অনুমতি দিতে pg_hba.conf সম্পাদনা করুন। শেষ লাইনে যুক্ত করুন:

    host     all             all             0.0.0.0/0               md5
    

গুরুত্বপূর্ণ: আপনি কী করছেন তা নিশ্চিত না হওয়া অবধি উত্পাদন ব্যবহারের জন্য শেষ ধাপের ডেটাবেস অ্যাক্সেসের প্রস্তাব দেওয়া হয় না।


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