दूसरा उत्तर वास्तव में समस्या के मूल कारण की ओर इशारा करता है, हालाँकि यह जिस सहायता पृष्ठ की ओर इशारा करता है, उसमें कोई समाधान नहीं है। मेरे लिए यह काम करने के लिए मैं यहां आया हूं:
- अपनी सामान्य docker-compose फ़ाइल का उपयोग करके कंटेनर को प्रारंभ करें, यह हार्डकोडेड uid:gid (999:999) के साथ निर्देशिका बनाता है
version: '3.7'
services:
db:
image: postgres
container_name: postgres
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: fake_database_user
POSTGRES_PASSWORD: fake_database_PASSWORD
- कंटेनर को रोकें और मैन्युअल रूप से स्वामित्व को uid:gid में बदलें जो आप चाहते हैं (मैं इस उदाहरण के लिए 1000:1000 का उपयोग करूंगा
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- अपना वांछित uid:gid जोड़ने के लिए अपनी docker फ़ाइल संपादित करें और docker-compose का उपयोग करके इसे फिर से प्रारंभ करें (
user:
पर ध्यान दें )
version: '3.7'
services:
db:
image: postgres
container_name: postgres
volumes:
- ./data:/var/lib/postgresql/data
user: 1000:1000
environment:
POSTGRES_USER: fake_database_user
POSTGRES_PASSWORD: fake_database_password
जिस कारण से आप केवल user:
का उपयोग नहीं कर सकते प्रारंभ से ही यह है कि यदि छवि किसी भिन्न उपयोगकर्ता के रूप में चलती है तो यह डेटा फ़ाइलें बनाने में विफल रहती है।
छवि दस्तावेज़ीकरण पृष्ठ
पर , यह /etc/passwd
. को उजागर करने के लिए वॉल्यूम जोड़ने के समाधान का उल्लेख करता है --user
providing प्रदान करते समय छवि में केवल पढ़ने के लिए फ़ाइल के रूप में फ़ाइल विकल्प, हालांकि, मेरे लिए नवीनतम छवि के साथ काम नहीं किया, क्योंकि मुझे निम्न त्रुटि मिल रही थी। वास्तव में तीन प्रस्तावित समाधानों में से किसी ने भी मेरे लिए काम नहीं किया।
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted