আমার একটি ডকার পাত্রে একটি সার্ভারে পোস্টগ্র্যাস্কল আছে। আমি কীভাবে এর বাইরে থেকে অর্থাৎ আমার লোকাল কম্পিউটার থেকে এটি সংযোগ করতে পারি? এটির অনুমতি দেওয়ার জন্য আমার কোন সেটিংয়ের আবেদন করা উচিত?
আমার একটি ডকার পাত্রে একটি সার্ভারে পোস্টগ্র্যাস্কল আছে। আমি কীভাবে এর বাইরে থেকে অর্থাৎ আমার লোকাল কম্পিউটার থেকে এটি সংযোগ করতে পারি? এটির অনুমতি দেওয়ার জন্য আমার কোন সেটিংয়ের আবেদন করা উচিত?
উত্তর:
আপনি পোস্টগ্র্রেস এইভাবে চালাতে পারেন (একটি বন্দর মানচিত্র):
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
সুতরাং এখন আপনি আপনার কনটেইনারটির 5432 বন্দরটি আপনার সার্ভারের 5432 পোর্টে ম্যাপ করেছেন। -p <host_port>:<container_port>
.তখন এখন আপনার পোস্টগ্রাগগুলি আপনার থেকে অ্যাক্সেসযোগ্যpublic-server-ip:5432
পরীক্ষা করার জন্য: পোস্টগ্রিস ডাটাবেস চালান (উপরের কমান্ড)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05b3a3471f6f postgres "/docker-entrypoint.s" 1 seconds ago Up 1 seconds 0.0.0.0:5432->5432/tcp some-postgres
আপনার ধারক ভিতরে যান এবং একটি ডাটাবেস তৈরি করুন:
docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
আপনার লোকালহোস্টে যান (যেখানে আপনার কোনও সরঞ্জাম বা পিএসকিএল ক্লায়েন্ট রয়েছে)।
psql -h public-ip-server -p 5432 -U postgres
(পাসওয়ার্ড মাইক্রিসেটপ্যাসওয়ার্ড)
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
mytest | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
সুতরাং আপনি আপনার লোকালহোস্ট থেকে ডেটাবেস (যা কোনও সার্ভারে ডকারে চলছে) অ্যাক্সেস করছেন।
ইন এই পোস্টে এটা বিস্তারিতভাবে expained হচ্ছে।
ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
docker run --net=host --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
আমি এটি লিনাক্সে চালিত করতে পরিচালিত
ডকার পোস্টগ্রিস চালান - বন্দরটি প্রকাশিত হয়েছে তা নিশ্চিত করুন, আমি আলপাইন ব্যবহার করি কারণ এটি কম ওজনের।
sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
অন্য টার্মিনাল ব্যবহার করে, পোস্টগ্রিস ইউরি ব্যবহার করে হোস্ট থেকে ডেটাবেস অ্যাক্সেস করুন
psql postgresql://postgres:1234@localhost:5432/postgres
ম্যাক ব্যবহারকারীদের জন্য, পিগিসিএল দিয়ে পিএসকিএল প্রতিস্থাপন করুন
sudo
আপনার ধারকটি চালানোর জন্য আপনার সত্যই ব্যবহার করা উচিত নয় ।
আপনি ডকার নির্বাহী কমান্ডের মাধ্যমে এগুলি ব্যবহার করতে পারেন:
$ docker exec -it postgres-container bash
# su postgres
$ psql
অথবা
$ docker exec -it postgres-container psql -U postgres
su postgres
?
আমি ইতিমধ্যে হোস্ট মেশিনে পোস্টগ্রিজ চালিয়েছি এবং নেটওয়ার্ক থেকে সংযোগের অনুমতি দিতে চাইনি, তাই আমি কেবল দুটি লাইনে অস্থায়ী পোস্টগ্রাস উদাহরণ চালিয়েছি এবং ডাটাবেস তৈরি করেছি:
# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres
# Create database
docker exec -it postgres-container createdb -U postgres my-db
-e POSTGRES_DB=my-db
আমি ডকার পাত্রে পোস্টগ্রিজ সহ জাঙ্গো ব্যবহার করছি। ডকার-রচনা ফাইলটিতে, নিম্নলিখিতগুলি যুক্ত করুন:
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
যা আপনার স্থানীয় মেশিন দ্বারা অ্যাক্সেসযোগ্য পোর্ট যুক্ত করবে। নিজের জন্য, আমি এটির সাথে ডিবিভারকে সংযুক্ত করেছি। এটি আপনার অ্যাপ্লিকেশন অনুরোধ এবং স্থানীয় মেশিন অনুরোধের মধ্যে পোর্ট সংঘাতগুলি রোধ করবে। প্রথমে, আমি একটি বার্তা পেয়েছি যে 5432 বন্দরটি ব্যবহৃত হচ্ছে (যা জ্যাঙ্গো অ্যাপ্লিকেশন দ্বারা) তাই আমি পিজএডমিন বা ডিবিভারের মাধ্যমে অ্যাক্সেস করতে পারিনি।
লোকালহোস্ট থেকে সংযোগ করতে আপনাকে '--net হোস্ট' যুক্ত করতে হবে:
docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
আপনি আপনার লোকালহস্ট থেকে এক্সিকিউট ব্যবহার না করে সরাসরি সার্ভারটি অ্যাক্সেস করতে পারেন:
psql -h localhost -p 5432 -U postgres
আমি লোকালহোস্ট (ম্যাক) থেকে পোস্টগ্রিসের ধারকটিতে সংযোগ দেওয়ার চেষ্টা করেছি। আমি ডকর-রচনা ফাইলটিতে পোর্টটি 5432 থেকে 3306 এ পরিবর্তন করেছি এবং ধারকটি শুরু করেছি। আমি কেন এটি করেছি ধারণা নেই: |
তারপরে আমি PSequel এবং প্রশাসকের মাধ্যমে পোস্টগ্রাসের সাথে সংযোগ স্থাপনের চেষ্টা করেছি এবং সংযোগ স্থাপন করা যায়নি।
ফিরে পোর্ট 5432 এ স্যুইচ করার পরে সমস্ত ঠিকঠাক কাজ করে।
db:
image: postgres
ports:
- 5432:5432
restart: always
volumes:
- "db_sql:/var/lib/mysql"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
এটি আমার অভিজ্ঞতাটি শেয়ার করতে চেয়েছিলাম। সম্ভবত কেউ এটি ব্যবহার করতে পারেন।
/var/lib/mysql
?
আমি ধরে নিচ্ছি যে আপনি যখনই বাইরে থেকে এর সাথে সংযোগ করেন তখনই আপনি আপনার ধারকটিতে উপস্থিত ডেটা দেখতে সক্ষম হতে চান । এটি করার জন্য, আপনাকে পোস্টগ্র্যাগের চিত্রটিতে ডেটা রাখতে হবে ।
যদি আপনার কাছে অবিরাম ডেটা না থাকে তবে আপনাকে প্রথম বার করা সমস্ত কিছু পুনরাবৃত্তি করতে হবে।
3, 5, 6, 7 এবং 8 টি পদক্ষেপ সরাসরি আপনার প্রশ্নের উত্তর দিন।
উইন্ডোজ 10 পাওয়ারশেলে আমি যে সম্পূর্ণ প্রক্রিয়াটি অনুসরণ করেছি তার বিশদ ওভারভিউ এখানে দেওয়া হয়েছে (লিনাক্স এবং ম্যাকোজেও কমান্ড একই রকম):
পদক্ষেপ 1 : নন-অ্যাডমিন মোডে পাওয়ারশেল শুরু করুন
পদক্ষেপ 2 : পোস্টগ্রিস ডকার চিত্রটি ডাউনলোড করুন:
docker pull postgres:latest
পদক্ষেপ 3 : বিচ্ছিন্ন মোডে ডকার ধারকটি শুরু করুন এবং একটি ভলিউম তৈরি করে এবং কোনও গন্তব্যে বাঁধাই করে পোস্টগ্রিজ চিত্রের ডেটা অব্যাহত রাখুন
( দ্রষ্টব্য : ডিফল্টরূপে 5432 ব্যবহৃত হয় এমন ডিফল্ট পোর্ট; তবে ক্লায়েন্টের সংযোগ ত্রুটিগুলি রোধ করার জন্য এটি স্পষ্টভাবে বর্ণনা করুন) pgadmin, dbeaver, ইত্যাদি)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest
পদক্ষেপ 4 : চলমান পাত্রগুলির স্থিতি পরীক্ষা করুন
docker ps -a
পদক্ষেপ ৫ : ইন্টারেক্টিভ মোডে কনটেইনার_নামের ভিতরে যান
( দ্রষ্টব্য : ls, pwd ইত্যাদির মতো কমান্ড এখানে কার্যকর করা যেতে পারে যদি আপনি ইনস্টলেশনের সময় লিনাক্স ধারকগুলি পরীক্ষা করে থাকেন)
docker exec -it postgres-test psql -U postgres
পদক্ষেপ :: নমুনা ডেটা তৈরি করুন। এই মুহুর্তে, আপনিpsql
নিম্নলিখিত পদ্ধতিতে কমান্ডগুলিসহ খেলতে পারেন:
# CREATE DATABASE test;
# \c test
# CREATE TABLE test_table(something int);
# INSERT INTO test_table VALUES (123);
# SELECT * FROM test_table;
# \q
পদক্ষেপ 7 : এর মতো একটি ডাটাবেস ক্লায়েন্ট অ্যাপ্লিকেশনটি খুলুনpgadmin
বাdbeaver
সংযোগ ক্ষেত্রে নীচে প্রবেশ করুন:
Host: localhost
Database: test
User: postgres
Password: password
পদক্ষেপ 8 :select * from test_table
ক্যোয়ারী সম্পাদকটিতেক্যোয়ারী লিখুনএবং আপনার আউটপুটটি দেখতে সক্ষম হওয়া উচিত123
কোনও কারণে 5432 বন্দরটি সুরক্ষিত বলে মনে হচ্ছে। আমি আমার বন্দর কনফিগ পরিবর্তিত 5432:5432
করতে 5416:5432
এবং নিচের কমান্ড কাজ তার Docker ধারক বাইরে থেকে আপনার postgres ডাটাবেসের সাথে সংযোগ :
psql -h localhost -p 5416 -U <my-user> -d <my-database>
postgres
আপনার হোস্ট মেশিনে পরিষেবাটি চালাচ্ছেন যা ইতিমধ্যে লোকালহোস্টের সাথে আবদ্ধ হবে: 5432 আপনাকে এটি ব্যবহার করতে বাধা দিবে। কনটেইনারটির অভ্যন্তরে ডিফল্ট পোর্টে 5432 আলাদা হোস্ট পোর্ট ম্যাপিং করা এটির একটি ভাল সমাধান; বিকল্পভাবে আপনি আপনার হোস্টে পোস্টগ্রিজ পরিষেবাটি বন্ধ করতে পারেন তবে সম্ভবত এটি আপনার কোনও প্রয়োজনের জন্য ব্যবহৃত হয়েছে।
প্রথমে পোস্টগ্রিজের জন্য ডকার চিত্রটি খুলুন
docker exec -it <container_name>
তারপরে আপনি মূলটি পাবেন - এর root@868594e88b53:/#
জন্য ডাটাবেস সংযোগ দরকার
psql postgresql://<username>:<databasepassword>@postgres:5432/<database>
docker ps -a
ধারক আইডির জন্য ডকার এক্সিকিউট-পিএসকিএল-ইউ-ডাব্লু পাবেন
আমি জানি যে আপনি যদি @ মার্টিনের মতো ডকার-রচনাটি ব্যবহার করেন তবে এটি দেরী হয়ে গেছে
এগুলি স্নিপেটস যা আমাকে ধারকটির ভিতরে পিএসকিএল-তে সংযোগ স্থাপনে সহায়তা করেছিল
docker-compose run db bash
root@de96f9358b70:/# psql -h db -U root -d postgres_db
আমার 50 টি খ্যাতি নেই বলে মন্তব্য করতে পারছি না। সুতরাং আশা করি এটি সাহায্য করবে।