मैं dockerfile के साथ एक कंटेनर में mkdir कमांड के साथ एक निर्देशिका नहीं बना सकता।

मेरी Dockerfile फ़ाइल बस है;

FROM php:fpm

WORKDIR /var/www/html

VOLUME ./code:/var/www/html

RUN mkdir -p /var/www/html/foo

इस तरह मैंने एक साधारण php: fpm कंटेनर बनाया। और मैंने foo नामक निर्देशिका बनाने के लिए लिखा था।

docker build -t phpx .

मैंने उपरोक्त कोड के साथ बनाया है।

मेरी डोकर-लिखें फ़ाइल में इस प्रकार है।

version: '3'

services:
web:
container_name: phpx
build : .
ports:
- "80:80"
volumes:
- ./code:/var/www/html

बाद में; निम्नलिखित कोड चलाएँ और मैंने कंटेनर कर्नेल में प्रवेश किया।

docker exec -it phpx /bin/bash

लेकिन foo in / var / www / html नाम की कोई निर्देशिका नहीं है।

मुझे आश्चर्य है कि मैं कहाँ गलत कर रहा हूँ। क्या आप मेरी मदद कर सकते हैं?

30
Spartan Troy 11 अक्टूबर 2018, 10:02

1 उत्तर

सबसे बढ़िया उत्तर

इसका कारण यह है कि आप अपने होस्ट से /var/www/html तक वॉल्यूम बढ़ा रहे हैं। क्रमशः:

  1. RUN mkdir -p /var/www/html/foo आपके कंटेनर के फाइल सिस्टम के अंदर foo डायरेक्टरी बनाता है।
  2. docker-compose.yml ./code:/var/www/html कंटेनर फाइल सिस्टम में ./code की सामग्री के पीछे होस्ट फाइल सिस्टम पर /var/www/html की सामग्री को "छुपा" देता है।

तो वास्तव में, जब आप अपने कंटेनर में निष्पादित करते हैं तो जब आप /var/www/html देखते हैं तो आप होस्ट पर ./code निर्देशिका की सामग्री देखते हैं।

ठीक करें: या तो आप अपने docker-compose.yml से वॉल्यूम हटा दें या कंटेनर शुरू करने से पहले होस्ट पर foo-निर्देशिका बनाएं।

अतिरिक्त टिप्पणी: अपने Dockerfile में आप एक वॉल्यूम को VOLUME ./code:/var/www/html के रूप में घोषित करते हैं। यह काम नहीं करता है और आपको शायद इसे हटा देना चाहिए। Dockerfile में आप अपने होस्ट पर पथ निर्दिष्ट नहीं कर सकते।

docker से उद्धरण:

मेजबान निर्देशिका को कंटेनर रन-टाइम पर घोषित किया जाता है: मेजबान निर्देशिका (माउंटपॉइंट), इसकी प्रकृति से, मेजबान-निर्भर है। यह छवि पोर्टेबिलिटी को संरक्षित करने के लिए है। चूंकि किसी दिए गए होस्ट निर्देशिका को सभी होस्टों पर उपलब्ध होने की गारंटी नहीं दी जा सकती है। इस कारण से, आप Dockerfile के भीतर से एक होस्ट निर्देशिका को माउंट नहीं कर सकते। VOLUME निर्देश होस्ट-डीआईआर पैरामीटर निर्दिष्ट करने का समर्थन नहीं करता है। जब आप कंटेनर बनाते या चलाते हैं तो आपको माउंटपॉइंट निर्दिष्ट करना होगा।

25
Fabian Braun 11 अक्टूबर 2018, 07:18