कंटेनर के अंदर रूट का उपयोग ठीक है, क्योंकि कंटेनर में बहुत से विशेषाधिकार हैं। यह हार्डवेयर या माउंट पथ तक नहीं पहुंच सकता है। यह अनिवार्य रूप से एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता है।
आवेदन स्थापित करना निश्चित रूप से कंटेनर के अंदर किया जाना चाहिए। Dockerfile
जो छवि बनाता है उसे एप्लिकेशन को प्रारंभ करने के लिए इंस्टॉल करना है, और यह कंटेनर के अंदर होता है। यदि आप एक कस्टम एप्लिकेशन (उदा। Php7) चलाने के लिए कंटेनर का उपयोग कर रहे हैं जो नोड के साथ बनाया गया है और ऐसे में, एक निर्माण कंटेनर जो इंस्टॉलेशन करता है, एप्लिकेशन के अद्यतन को अलग करने और होस्ट सिस्टम से व्यवहार स्थापित करने का सही तरीका है।
डॉकर के साथ एप्लिकेशन को तैनात करते समय अनिवार्य रूप से किसी कंटेनर के बाहर कुछ भी नहीं चलना चाहिए। किसी भी cron
स्क्रिप्ट को docker exec container script.sh
या कंटेनर के अंदर रन आवधिक नौकरियों के समान चलाना चाहिए, उदाहरण के लिए।
आम तौर पर, यदि आवेदन एक विन्यास के आधार पर अद्यतन मॉड्यूल की तरह कुछ करने के लिए रूट विशेषाधिकारों की आवश्यकता है, मैं docker-compose
का प्रयोग कर एक build
कंटेनर जो रूट के रूप में यह सब करता है और फिर बाहर निकल जाता है स्थापित करने के लिए। मैं जितनी संभव हो उतनी क्षमताओं को हटाने के लिए वास्तविक अनुप्रयोग कंटेनर के लिए cap-drop
अनुभाग का उपयोग करता हूं।
विशेषाधिकारों को छोड़ने के लिए कई अनुप्रयोगों को setuid
या setgid
की आवश्यकता होती है। nginx
इनकी आवश्यकता है ताकि यह root
से www-data:www-data
में बदल सके। nginx
विफल होगा यदि यह उपयोगकर्ता www-data
के रूप में आता है। आवेदन परिवर्तन करने के बाद उन क्षमताओं को छोड़ देना चाहिए।
स्रोत
2016-11-18 22:33:17
dockerized अनुप्रयोगों आत्म निहित होना चाहिए, और उन्हें –
चलाने अब सवाल है के लिए मेजबान वातावरण पर निर्भर नहीं: कैसे एक कंटेनर बनाया जाता है, आवेदन के अंदर भी शामिल है। क्या वह कंटेनर खुद को बनाना चाहिए? सभी शामिल सिस्टम libs को अद्यतन कौन कर रहा है जो अद्यतन प्राप्त कर सकते हैं, अक्सर महत्वपूर्ण सुरक्षा अद्यतन? आपको अभी भी उस चीज़ की आवश्यकता होगी जो उस कंटेनर के बाहर डॉकर कंटेनर बनाता है। ऐसा क्यों नहीं है कि "कुछ" एप्लिकेशन को एक चलने योग्य राज्य में कंटेनर में भी डाल देता है? – Sven