আমার ডকার কম্পোজ ফাইলটিতে তিনটি ধারক, ওয়েব, এনজিনেক্স এবং পোস্টগ্র্রেস রয়েছে। পোস্টগ্র্রেসগুলি এর মতো দেখাচ্ছে:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
আমার লক্ষ্য একটি ভলিউম যা একটি স্থানীয় নামক ফোল্ডারের অনুরূপ মাউন্ট করে ./databaseযেমন postgres ধারক ভিতরে /var/lib/postgres। আমি যখন এই ধারকগুলি শুরু করি এবং পোস্টগ্রাগুলিতে ডেটা sertোকান তখন আমি যাচাই করি যে /var/lib/postgres/data/base/আমি যোগ করছি (পোস্টগ্রিস পাত্রে) যে তথ্যটি পূর্ণ হয় তবে আমার স্থানীয় সিস্টেমে ./databaseকেবল এতে একটি dataফোল্ডার পাওয়া যায়, অর্থাৎ ./database/dataএটি তৈরি করা হয় তবে এটি খালি থাকে empty । কেন?
মন্তব্য:
- এটি পরামর্শ দেয় যে আমার উপরের ফাইলটির কাজ করা উচিত।
- এই ব্যক্তিটি ডকার পরিষেবা ব্যবহার করছে যা আকর্ষণীয়
আপডেট 1
নিকের পরামর্শ অনুসারে, আমি এটি করেছি docker inspectএবং পেয়েছি:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
যা দেখে মনে হয় যে ডেটাটি অন্য ভলিউমের দ্বারা চুরি হচ্ছে যা আমি নিজের কোড করি নি। কেন তা নিশ্চিত নয়। পোস্টগ্রিসের চিত্রটি কি আমার জন্য সেই ভলিউম তৈরি করছে? যদি তাই হয়, আমি পুনরায় চালু করার সময় আমি যে ভলিউমটি মাউন্ট করছি তার পরিবর্তে সেই ভলিউমটি ব্যবহার করার কোনও উপায় আছে ? অন্যথায়, অন্য ভলিউমটি অক্ষম করার এবং আমার নিজের ব্যবহার করার কি কোনও ভাল উপায় আছে ./database?
আপডেট 2
আমি সমাধানটি পেয়েছি, নিককে ধন্যবাদ! (এবং অন্য বন্ধু) নীচে উত্তর দিন।
from app import dbএবং db.create_all()A থেকে docker runপাত্রে শুরু করেন। আমি initdbকমান্ড লাইন থেকে সরাসরি না ।
sudo su -এবং বর্ণন ./database/data। যতদূর আমি বলতে পারি সেখানে কিছুই নেই।
initdbআপনার ডাটাবেস ক্লাস্টার শুরু করতে কমান্ড লাইনটি চালাচ্ছেন ?