Docker, आसानी से वॉल्यूम को माउंट करें


106

मैं डॉकर के साथ काम कर रहा हूं, और मैं एक डायनामिक फ़ोल्डर माउंट करना चाहता हूं जो बहुत कुछ बदलता है (इसलिए मुझे प्रत्येक निष्पादन के लिए डॉकर छवि नहीं बनानी होगी, जो बहुत महंगा होगा), लेकिन मैं चाहता हूं कि वह फ़ोल्डर केवल पढ़ने के लिए हो । फोल्डर के मालिक को किसी और व्यक्ति में बदलने से काम हो जाता है। हालांकि, एक्सेस की chownआवश्यकता होती है root, जिसे मैं किसी एप्लिकेशन को उजागर नहीं करना पसंद करूंगा।

जब मैं -vध्वज को माउंट करने के लिए उपयोग करता हूं , तो यह जो भी उपयोगकर्ता नाम मुझे देता है, मैंने डॉक छवि के अंदर एक गैर-रूट उपयोगकर्ता बनाया है, हालांकि, स्वामी के साथ वॉल्यूम में सभी फाइलें जो उपयोगकर्ता के रूप में है, जो docker चलाती है, उपयोगकर्ता में बदल जाती है कमांड लाइन से दें, इसलिए मैं केवल पढ़ने के लिए फ़ाइलें और फ़ोल्डर्स नहीं बना सकता। मेरे द्वारा इसे कैसे रोका जा सकता है?

मैंने भी जोड़ा mustafa ALL=(docker) NOPASSWD: /usr/bin/docker, इसलिए मैं टर्मिनल के माध्यम से किसी अन्य उपयोगकर्ता को बदल सकता था, लेकिन फिर भी, फाइलों में मेरे उपयोगकर्ता के लिए अनुमतियाँ हैं।


बस मैंने सोचा कि मैं यहाँ एक टिप्पणी छोड़ दूं कि एक उपयोगकर्ता को डॉकटर कंटेनर चलाने में सक्षम किया जाए जो उसे पूर्ण रूट एक्सेस दे। यह डॉक्यूमेंट डॉक्यूमेंट के सुरक्षा अनुभाग में भी प्रलेखित है।
ब्लैकक्लॉज

जवाबों:


170

आप निर्दिष्ट कर सकते हैं कि एक मात्रा-केवल पढ़ने के लिए किया जाना चाहिए जोड़कर :roकरने के लिए -vस्विच:

docker run -v volume-name:/path/in/container:ro my/image

ध्यान दें कि फ़ोल्डर तब केवल कंटेनर में पढ़ा जाता है और होस्ट पर रीड-राइट होता है।

2018 संपादित करें

उपयोग वॉल्यूम प्रलेखन के अनुसार , --mountस्विच का उपयोग करके वॉल्यूम को माउंट करने का एक और तरीका है । यहाँ केवल पढ़ने के लिए उपयोग करने का तरीका बताया गया है:

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image

डोकर-लिखें

यहाँ एक उदाहरण है कि केवल-पढ़ने के लिए कंटेनर कैसे निर्दिष्ट करें docker-compose:

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true

8
वहाँ लिखने की अनुमति है, लेकिन उन्हें होस्ट करने के लिए वापस लिखना नहीं है? यह शानदार होगा
रे फॉस

9
ऐसा लगता है कि आप कोई भी मात्रा निर्दिष्ट नहीं करना चाहते हैं।
Alp

1
सॉर्ट करें ... मुझे बस डॉकरीफाइल COPY का उपयोग करने के लिए एक छवि बनाने या docker cpएक बंद बंद कंटेनर पर एक अलग कमांड का उपयोग करने की तरह नहीं है ।
रे फॉस

5
हो सकता है कि आप इसके लिए एक नया प्रश्न बना सकें, जहाँ आप अधिक विवरण प्रदान करें और इसे यहाँ लिंक करें?
अल्फा

आप redis:alpine:ro
डॉकटर के

23

डोकर-लिखें

यहां केवल-पढ़ने के लिए वॉल्यूम निर्दिष्ट करने का एक उचित तरीका है docker-compose:

version: "3.2" # Use version 3.2 or above
services:
  my_service:
    image: my:image
    volumes:
      - type: volume
        source: volume-name
        target: /path/in/container
        read_only: true
volumes:
  volume-name:

https://docs.docker.com/compose/compose-file/#long-syntax-3


2
यह वास्तव में उचित है, लेकिन यहां केवल पढ़ने के लिए एक वॉल्यूम है, कंटेनर नहीं।
Константин Ван

यह केवल मेरे लिए काम करता है version: "3.2"- धन्यवाद :)
डेवी

"संस्करण 3.2 फ़ाइल प्रारूप में जोड़ा गया।" yep
rybo111

3
आप यह भी कर सकते हैं - './my-file.txt:/container-readonly-file.txt:ro'के तहत volumesटिप्पणी - :roअंत में।
रायबो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.