বাইরে থেকে কোনও ডকার পাত্রে পোস্টগ্রেস্কল-এ সংযোগ স্থাপন করা হচ্ছে


197

আমার একটি ডকার পাত্রে একটি সার্ভারে পোস্টগ্র্যাস্কল আছে। আমি কীভাবে এর বাইরে থেকে অর্থাৎ আমার লোকাল কম্পিউটার থেকে এটি সংযোগ করতে পারি? এটির অনুমতি দেওয়ার জন্য আমার কোন সেটিংয়ের আবেদন করা উচিত?


1
আপনি পোষ্টস্ক্রিএল শুরু করতে কোন আদেশ ব্যবহার করেছেন? আপনি একটি বন্দর প্রকাশ করতে এবং এটি মানচিত্র করতে সক্ষম
lvthillo

উত্তর:


313

আপনি পোস্টগ্র্রেস এইভাবে চালাতে পারেন (একটি বন্দর মানচিত্র):

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 হচ্ছে।


1
@ তাজোরোমরিরি আপনি কি নিশ্চিত যে আপনার পোস্টগ্রিসগুলি আপনার স্থানীয় মেশিনে চলছে? লোকালহোস্টের পরিবর্তে 127.0.0.1 চেষ্টা করে দেখতে পারেন তবে এটি কাজ করছে met
lvthillo

2
আপনার সার্বজনীন আইপি অ্যাড্রেস পান (অক্স):ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
পল

4
বিভিন্ন পোস্টগ্র্যাস / ডকার সম্পর্কিত পোস্টগুলির মধ্যে আমি খুঁজে পেয়েছি যে এটি সবচেয়ে দরকারী। ধন্যবাদ.
rg88

1
@ গারউডান আপনি যদি কোনও বন্দর মানচিত্র করতে না চান তবে এখনও আপনার হোস্ট থেকে পোস্টগ্রাসের ধারকটি অ্যাক্সেস করতে চান তবে আপনাকে হোস্ট নেটওয়ার্কে আপনার docker run --net=host --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
ধারকটিকে

1
প্রস্থান করা পিএসকিএল \ কিউ (কেবল আমার মতো নবাগতদের জন্য) নিয়ে কাজ করে
ডার্ক শুমাচর

39

আমি এটি লিনাক্সে চালিত করতে পরিচালিত

  1. ডকার পোস্টগ্রিস চালান - বন্দরটি প্রকাশিত হয়েছে তা নিশ্চিত করুন, আমি আলপাইন ব্যবহার করি কারণ এটি কম ওজনের।

    sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine

  2. অন্য টার্মিনাল ব্যবহার করে, পোস্টগ্রিস ইউরি ব্যবহার করে হোস্ট থেকে ডেটাবেস অ্যাক্সেস করুন

    psql postgresql://postgres:1234@localhost:5432/postgres

ম্যাক ব্যবহারকারীদের জন্য, পিগিসিএল দিয়ে পিএসকিএল প্রতিস্থাপন করুন


7
খুশি যে কেউ পাত্রে ঝাঁপ না দিয়ে কীভাবে সংযুক্ত হতে পারে তার উত্তর দিয়েছিল। thnx।
পাবটোরে

1
sudoআপনার ধারকটি চালানোর জন্য আপনার সত্যই ব্যবহার করা উচিত নয় ।
রাশ ব্যাটম্যান

29

আপনি ডকার নির্বাহী কমান্ডের মাধ্যমে এগুলি ব্যবহার করতে পারেন:

$ docker exec -it postgres-container bash

# su postgres

$ psql

অথবা

$ docker exec -it postgres-container psql -U postgres


এটি একটি আশ্চর্যজনকভাবে কার্যকর মন্তব্য
ড্যান রোজনস্টার্ক

কি করে su postgres?
Breno

14

আমি ইতিমধ্যে হোস্ট মেশিনে পোস্টগ্রিজ চালিয়েছি এবং নেটওয়ার্ক থেকে সংযোগের অনুমতি দিতে চাইনি, তাই আমি কেবল দুটি লাইনে অস্থায়ী পোস্টগ্রাস উদাহরণ চালিয়েছি এবং ডাটাবেস তৈরি করেছি:

# 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
পোস্টগ্র্যাসের

13

আমি ডকার পাত্রে পোস্টগ্রিজ সহ জাঙ্গো ব্যবহার করছি। ডকার-রচনা ফাইলটিতে, নিম্নলিখিতগুলি যুক্ত করুন:

db:
    image: postgres:10-alpine
    environment:
        - POSTGRES_DB=app
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=supersecretpassword
    **ports:
        - "6543:5432"**

যা আপনার স্থানীয় মেশিন দ্বারা অ্যাক্সেসযোগ্য পোর্ট যুক্ত করবে। নিজের জন্য, আমি এটির সাথে ডিবিভারকে সংযুক্ত করেছি। এটি আপনার অ্যাপ্লিকেশন অনুরোধ এবং স্থানীয় মেশিন অনুরোধের মধ্যে পোর্ট সংঘাতগুলি রোধ করবে। প্রথমে, আমি একটি বার্তা পেয়েছি যে 5432 বন্দরটি ব্যবহৃত হচ্ছে (যা জ্যাঙ্গো অ্যাপ্লিকেশন দ্বারা) তাই আমি পিজএডমিন বা ডিবিভারের মাধ্যমে অ্যাক্সেস করতে পারিনি।


1
আমি এটি সবচেয়ে সহায়ক বলে মনে করেছি। লোকেদের জন্য uisng ডকার-রচনা, এটি সবচেয়ে ভাল যাওয়ার মতো মনে হচ্ছে।
ডেভিড ফ্রিক

ধন্যবাদ ডেভিড, শুভ কোডিং!
ওমরইমান

9

লোকালহোস্ট থেকে সংযোগ করতে আপনাকে '--net হোস্ট' যুক্ত করতে হবে:

docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

আপনি আপনার লোকালহস্ট থেকে এক্সিকিউট ব্যবহার না করে সরাসরি সার্ভারটি অ্যাক্সেস করতে পারেন:

psql -h localhost -p 5432 -U postgres

6

আমি লোকালহোস্ট (ম্যাক) থেকে পোস্টগ্রিসের ধারকটিতে সংযোগ দেওয়ার চেষ্টা করেছি। আমি ডকর-রচনা ফাইলটিতে পোর্টটি 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

এটি আমার অভিজ্ঞতাটি শেয়ার করতে চেয়েছিলাম। সম্ভবত কেউ এটি ব্যবহার করতে পারেন।


3
ভলিউম পথ: /var/lib/mysql?
ডেভিড তাবারনারো এম।

5432 পোস্টগ্রিস ডিফল্ট বন্দর। 3306 মাইএসকিউএল ডিফল্ট পোর্ট। যদি আপনি ডকার-কম্পোজে প্রকাশিত বন্দরটি পরিবর্তন করেন তবে যে কোনও ক্লায়েন্ট সরঞ্জাম আপনি সংযোগ করতে ব্যবহার করার চেষ্টা করছেন সেগুলি ডিফল্ট হবে 5432 পোর্টের সাথে সংযোগ স্থাপনের চেষ্টা করা যদি না আপনি তাদের অন্য কোনও বন্দর ব্যবহার করতে বলেন।
দাভোস

6

আমি ধরে নিচ্ছি যে আপনি যখনই বাইরে থেকে এর সাথে সংযোগ করেন তখনই আপনি আপনার ধারকটিতে উপস্থিত ডেটা দেখতে সক্ষম হতে চান । এটি করার জন্য, আপনাকে পোস্টগ্র্যাগের চিত্রটিতে ডেটা রাখতে হবে ।

যদি আপনার কাছে অবিরাম ডেটা না থাকে তবে আপনাকে প্রথম বার করা সমস্ত কিছু পুনরাবৃত্তি করতে হবে।
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


5

কোনও কারণে 5432 বন্দরটি সুরক্ষিত বলে মনে হচ্ছে। আমি আমার বন্দর কনফিগ পরিবর্তিত 5432:5432করতে 5416:5432এবং নিচের কমান্ড কাজ তার Docker ধারক বাইরে থেকে আপনার postgres ডাটাবেসের সাথে সংযোগ :

psql -h localhost -p 5416 -U <my-user> -d <my-database>

এটি আমার পক্ষে কাজ করে তবে আমি ইন্টারনেটে কোনও ব্যাখ্যা পাই না। খুঁজে পেয়েছেন?
নাগাস

2
@ নেগাস আপনি সম্ভবত ইতিমধ্যে postgresআপনার হোস্ট মেশিনে পরিষেবাটি চালাচ্ছেন যা ইতিমধ্যে লোকালহোস্টের সাথে আবদ্ধ হবে: 5432 আপনাকে এটি ব্যবহার করতে বাধা দিবে। কনটেইনারটির অভ্যন্তরে ডিফল্ট পোর্টে 5432 আলাদা হোস্ট পোর্ট ম্যাপিং করা এটির একটি ভাল সমাধান; বিকল্পভাবে আপনি আপনার হোস্টে পোস্টগ্রিজ পরিষেবাটি বন্ধ করতে পারেন তবে সম্ভবত এটি আপনার কোনও প্রয়োজনের জন্য ব্যবহৃত হয়েছে।
দাভোস

5

প্রথমে পোস্টগ্রিজের জন্য ডকার চিত্রটি খুলুন

docker exec -it <container_name>

তারপরে আপনি মূলটি পাবেন - এর root@868594e88b53:/# জন্য ডাটাবেস সংযোগ দরকার

psql postgresql://<username>:<databasepassword>@postgres:5432/<database>

1

যদি এটি জাজানো ব্যাকএন্ড অ্যাপ্লিকেশন হয় তবে আপনি এরকম কিছু করতে পারেন।

docker exec -it container_id python manage.py dbshell

1

এখানে ভাল উত্তর রয়েছে তবে আপনি যদি পোস্টগ্রিস ডাটাবেস পরিচালনার জন্য কিছু ইন্টারফেস রাখতে চান তবে আপনি স্থানীয় কম্পিউটারে পিজএডমিন ইনস্টল করতে পারেন এবং এর আইপি এবং পোস্টগ্রিজ এক্সপোজড পোর্ট (ডিফল্টভাবে 5432) ব্যবহার করে দূরবর্তী মেশিনে সংযোগ করতে পারেন।



-1

আমি জানি যে আপনি যদি @ মার্টিনের মতো ডকার-রচনাটি ব্যবহার করেন তবে এটি দেরী হয়ে গেছে

এগুলি স্নিপেটস যা আমাকে ধারকটির ভিতরে পিএসকিএল-তে সংযোগ স্থাপনে সহায়তা করেছিল

docker-compose run db bash

root@de96f9358b70:/# psql -h db -U root -d postgres_db

আমার 50 টি খ্যাতি নেই বলে মন্তব্য করতে পারছি না। সুতরাং আশা করি এটি সাহায্য করবে।


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