সম্পাদনা: আপনি যদি উইন্ডোজ 18.03+ এর জন্য ডকার-ফর-ম্যাক বা ডকার-ফর-উইন্ডো ব্যবহার করছেন তবে কেবল হোস্টটি ব্যবহার করে আপনার মাইএসকিএল পরিষেবাটিতে সংযুক্ত করুন host.docker.internal
( 127.0.0.1
আপনার সংযোগের স্ট্রিংয়ের পরিবর্তে )।
18.09.3 ডকার হিসাবে, এটি লকারের জন্য ডকারে কাজ করে না। 8 ই মার্চ, 2019 এ একটি সংশোধন জমা দেওয়া হয়েছে এবং আশা করা যায় যে কোড বেজে একীভূত হবে। ততক্ষণ পর্যন্ত, কুইমনের উত্তরে বর্ণিত কনটেইনারটি ব্যবহার করা একটি কাজ ।
2020-01: কিছু অগ্রগতি হয়েছে। যদি সবকিছু ঠিকঠাক হয় তবে এটি ডকারে 20.04 এ অবতরণ করা উচিত
TLDR
--network="host"
আপনার docker run
কমান্ড ব্যবহার করুন , তারপরে 127.0.0.1
আপনার ডকার পাত্রে আপনার ডকার হোস্টকে নির্দেশ করবে।
দ্রষ্টব্য: এই মোডটি ডকুমেন্টেশন অনুযায়ী কেবল লিনাক্সের জন্য ডকারে কাজ করে ।
ডকার কনটেইনার নেটওয়ার্কিং মোডে নোট
কনটেইনার চলাকালীন ডকার বিভিন্ন নেটওয়ার্কিং মোড সরবরাহ করে । আপনি যে মোডটি বেছে নিয়েছেন তার উপর নির্ভর করে ডকার হোস্টে চলমান আপনার মাইএসকিউএল ডাটাবেসের সাথে আপনি আলাদাভাবে সংযোগ স্থাপন করবেন।
ডকার রান - নেট ওয়ার্ক = "সেতু" (ডিফল্ট)
ডকার docker0
পূর্বনির্ধারিত একটি ব্রিজ তৈরি করে । উভয় ডকার হোস্ট এবং ডকার পাত্রে সেই ব্রিজটিতে একটি আইপি ঠিকানা রয়েছে।
ডকার হোস্টে, টাইপ করুন যাতে sudo ip addr show docker0
আপনি দেখতে একটি আউটপুট পাবেন:
[vagrant@docker:~] $ sudo ip addr show docker0
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::5484:7aff:fefe:9799/64 scope link
valid_lft forever preferred_lft forever
তাই এখানে আমার Docker হোস্ট আইপি ঠিকানা আছে 172.17.42.1
উপর docker0
নেটওয়ার্ক ইন্টারফেস।
এখন একটি নতুন ধারক শুরু করুন এবং এটিতে একটি শেল পান: docker run --rm -it ubuntu:trusty bash
এবং ip addr show eth0
এর মূল নেটওয়ার্ক ইন্টারফেসটি কীভাবে সেট আপ করা হয়েছে তা আবিষ্কার করার জন্য এবং ধারকটির মধ্যে টাইপ করুন :
root@e77f6a1b3740:/# ip addr show eth0
863: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 66:32:13:f0:f1:e3 brd ff:ff:ff:ff:ff:ff
inet 172.17.1.192/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::6432:13ff:fef0:f1e3/64 scope link
valid_lft forever preferred_lft forever
এখানে আমার ধারকটির আইপি ঠিকানা রয়েছে 172.17.1.192
। এবার রাউটিং টেবিলটি দেখুন:
root@e77f6a1b3740:/# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.17.42.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 * 255.255.0.0 U 0 0 0 eth0
সুতরাং ডকার হোস্টের আইপি ঠিকানাটি 172.17.42.1
ডিফল্ট রুট হিসাবে সেট করা আছে এবং এটি আপনার ধারক থেকে অ্যাক্সেসযোগ্য।
root@e77f6a1b3740:/# ping 172.17.42.1
PING 172.17.42.1 (172.17.42.1) 56(84) bytes of data.
64 bytes from 172.17.42.1: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 172.17.42.1: icmp_seq=2 ttl=64 time=0.201 ms
64 bytes from 172.17.42.1: icmp_seq=3 ttl=64 time=0.116 ms
ডকার রান - নেট ওয়ার্ক = "হোস্ট"
বিকল্পভাবে আপনি সেট করা নেটওয়ার্ক সেটিংসhost
সহ একটি ডকার ধারক চালাতে পারেন । এই জাতীয় একটি ধারক ডকার হোস্টের সাথে নেটওয়ার্ক স্ট্যাকটি ভাগ করবে এবং ধারক দৃষ্টিকোণ থেকে, localhost
(বা 127.0.0.1
) ডকার হোস্টকে উল্লেখ করবে।
আপনার ডকারের ধারকটিতে যে কোনও বন্দর খোলা হবে তা ডকার হোস্টে খোলা হবে সে বিষয়ে সচেতন হন। এবং এটি বিকল্প -p
বা -P
docker run
বিকল্পের প্রয়োজন ছাড়াই ।
আমার ডকার হোস্টে আইপি কনফিগারেশন:
[vagrant@docker:~] $ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:98:dc:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe98:dcaa/64 scope link
valid_lft forever preferred_lft forever
এবং হোস্ট মোডে একটি ডকার ধারক থেকে :
[vagrant@docker:~] $ docker run --rm -it --network=host ubuntu:trusty ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:98:dc:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe98:dcaa/64 scope link
valid_lft forever preferred_lft forever
আপনি যেমন দেখতে পাচ্ছেন যে ডকার হোস্ট এবং ডকার উভয় ধারক একই নেটওয়ার্ক ইন্টারফেসটি ভাগ করে এবং এর মতো একই আইপি ঠিকানা।
পাত্রে থেকে মাইএসকিউএলে সংযুক্ত হচ্ছে
ব্রিজ মোড
ব্রিজ মোডের ধারকগুলি থেকে ডকার হোস্টে চলমান মাইএসকিউএল অ্যাক্সেস করার জন্য, আপনাকে নিশ্চিত করতে হবে যে মাইএসকিউএল পরিষেবাটি 172.17.42.1
আইপি ঠিকানায় সংযোগগুলির জন্য শুনছে ।
এটি করতে, আপনার bind-address = 172.17.42.1
বা bind-address = 0.0.0.0
আপনার মাইএসকিউএল কনফিগারেশন ফাইলে (my.cnf) রয়েছে তা নিশ্চিত করুন।
গেটওয়ের আইপি ঠিকানার সাথে যদি আপনার পরিবেশের পরিবর্তনশীল সেট করতে হয় তবে আপনি একটি ধারকটিতে নিম্নলিখিত কোডটি চালাতে পারেন:
export DOCKER_HOST_IP=$(route -n | awk '/UG[ \t]/{print $2}')
তারপরে আপনার অ্যাপ্লিকেশনটিতে DOCKER_HOST_IP
মাইএসকিউএল সংযোগটি খুলতে পরিবেশ পরিবর্তনশীলটি ব্যবহার করুন ।
দ্রষ্টব্য: আপনি যদি bind-address = 0.0.0.0
নিজের মাইএসকিউএল সার্ভারটি ব্যবহার করেন তবে সমস্ত নেটওয়ার্ক ইন্টারফেসের সংযোগগুলি শুনবে। এর অর্থ আপনার মাইএসকিউএল সার্ভারটি ইন্টারনেট থেকে পৌঁছানো যেতে পারে; সে অনুযায়ী ফায়ারওয়াল বিধিগুলি সেটআপ করতে নিশ্চিত করুন।
দ্রষ্টব্য 2: আপনি যদি bind-address = 172.17.42.1
নিজের মাইএসকিউএল সার্ভারটি ব্যবহার করেন তবে তা সংযোগগুলি শোনেন না 127.0.0.1
। ডক হোস্টে চলমান প্রক্রিয়াগুলি যা মাইএসকিউএলে কানেক্ট করতে চায় তাদের 172.17.42.1
আইপি ঠিকানাটি ব্যবহার করতে হবে ।
হোস্ট মোড
হোস্ট মোডে কনটেইনারগুলি থেকে ডকার হোস্টে চলমান মাইএসকিউএল অ্যাক্সেস পেতে bind-address = 127.0.0.1
আপনি আপনার মাইএসকিউএল কনফিগারেশন রাখতে পারেন এবং আপনাকে যা করতে হবে তা হ'ল 127.0.0.1
আপনার পাত্রে থেকে সংযোগ স্থাপন করা :
[vagrant@docker:~] $ docker run --rm -it --network=host mysql mysql -h 127.0.0.1 -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.41-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
দ্রষ্টব্য: ব্যবহার করুন mysql -h 127.0.0.1
এবং না mysql -h localhost
; অন্যথায় মাইএসকিউএল ক্লায়েন্ট একটি ইউনিক্স সকেট ব্যবহার করে সংযোগ দেওয়ার চেষ্টা করবে।