डॉकर कॉपी इश्यू- "ऐसी कोई फाइल या डायरेक्टरी नहीं"

मेरे डॉकरफाइल में मेरे पास निम्नलिखित 'कॉपी" स्टेटमेंट है:

# Copy app codeCOPY /srv/visitor /srv/visitor

यह कहे बिना जाना चाहिए कि मेरे होस्ट सिस्टम में, "/एसआरवी/विज़िटर" निर्देशिका के तहत, वास्तव में मेरा स्रोत कोड है:

[root@V12 visitor]# ls /srv/visitor/Dockerfile  package.json  visitor.js

अब, जब मैं इस डॉकरफाइल का उपयोग करके एक छवि बनाने की कोशिश करता हूं तो यह उस चरण पर लटका रहता है जब "कॉपी" होने वाला होता है:

Step 10 : COPY /srv/visitor /srv/visitorINFO[0155] srv/visitor: no such file or directory

यह कहता है कि ऐसी कोई निर्देशिका नहीं है, लेकिन स्पष्ट रूप से है ।

कोई विचार?

अद्यतन 1:

यह मुझे बताया गया है कि मुझसे गलती हुई थी, जिस तरह से मैंने बिल्ड संदर्भ को समझा । सुझाव इस पर "कॉपी" कथन को बदलने की राशि है:

COPY . /srv/visitor

समस्या यह है कि मेरे पास यह इस तरह था, और निर्माण प्रक्रिया अगले चरण में रुक गई:

RUN npm install

इसने "नो पैकेज" की तर्ज पर कुछ कहा । जेसन फ़ाइल मिली", जब स्पष्ट रूप से एक है ।

अद्यतन 2:

मैंने इसे डॉकरफाइल में इस बदलाव के साथ चलाने की कोशिश की:

COPY source /srv/visitor/

एनपीएम चलाने की कोशिश करते समय यह रुका:

Step 12 : RUN npm install ---> Running in ae5e2a993e11npm ERR! install Couldn't read dependenciesnpm ERR! Linux 3.18.5-1-ARCHnpm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install"npm ERR! node v0.10.36npm ERR! npm  v2.5.0npm ERR! path /package.jsonnpm ERR! code ENOPACKAGEJSONnpm ERR! errno 34npm ERR! package.json ENOENT, open '/package.json'npm ERR! package.json This is most likely not a problem with npm itself.npm ERR! package.json npm can't find a package.json file in your current directory.npm ERR! Please include the following file with any support request:npm ERR!     /npm-debug.logINFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34

तो, क्या प्रतिलिपि का प्रदर्शन किया गया है? यदि हाँ, तो एनपीएम पैकेज खोजने में असमर्थ क्यों है । json?

मेरे लिए निर्देशिका सही संदर्भ में थी, केवल इसे (छिपी हुई)में शामिल किया गया था .dockerignore परियोजना की जड़ में फ़ाइल। इससे त्रुटि संदेश जाता है:

lstat mydir/myfile.ext: no such file or directory

प्रलेखन से :

<src> पथ निर्माण के संदर्भ में होना चाहिए; आप कॉपी नहीं कर सकते । ./कुछ /कुछ, क्योंकि पहले कदम के एक डोकर का निर्माण करने के लिए है भेजने के संदर्भ निर्देशिका (और subdirectories करने के लिए) डोकर डेमॉन से होकर.

जब आप उपयोग करते हैं /srv/visitor आप बिल्ड संदर्भ के बाहर एक पूर्ण पथ का उपयोग कर रहे हैं, भले ही यह वास्तव में वर्तमान निर्देशिका हो ।

आप इस तरह अपने निर्माण संदर्भ को बेहतर ढंग से व्यवस्थित करते हैं :

├── /srv/visitor│   ├── Dockerfile│   └── resources│       ├── visitor.json│       ├── visitor.js

और उपयोग करें :

COPY resources /srv/visitor/

नोट:

docker build - < Dockerfile कोई संदर्भ नहीं है ।

इसलिए उपयोग करें,

docker build .

मेरे लिए मुद्दा यह था कि मैं उपयोग कर रहा था docker build - < Dockerfile

से प्रलेखननोट: यदि आप स्टड का उपयोग करके निर्माण करते हैं (docker build - < somefile), कोई बिल्ड संदर्भ नहीं है, इसलिए कॉपी का उपयोग नहीं किया जा सकता ।

मैं इस मुद्दे पर चल रहा था और पता चला कि मैं अन्य निर्देशिकाओं से अपने डॉकरफाइल(ओं) को लोड करने के लिए बिल्ड वैरिएबल में एक संदर्भ जोड़ने में सक्षम था । इसने मुझे अपनी डिफ़ॉल्ट डॉकर फ़ाइल संरचना को अपनी पसंद के अनुसार थोड़ा और बदलने की अनुमति दी । यहाँ मेरे डॉकर-रचना से एक स्निपेट है । yml:

version: '3'services:  webserver:    build:      context: .      dockerfile: ./server/Dockerfile    ...

संदर्भ जोड़कर मैं यह परिभाषित करने में सक्षम था कि फ़ाइलों को कहाँ संदर्भित किया जाना चाहिए । आप यहां डॉकर डॉक्स का संदर्भ दे सकते हैं: https://docs.docker.com/compose/compose-file/#context

आशा है कि यह मदद करता है!

जैसा कि जेवियर लुकास [अत्यंत उपयोगी] उत्तर ने कहा है, आप अपने बिल्ड संदर्भ के बाहर एक निर्देशिका से कॉपी या ऐड का उपयोग नहीं कर सकते हैं (जिस फ़ोल्डर से आप "डॉकर बिल्ड" चलाते हैं, वह आपके समान निर्देशिका होनी चाहिए । Dockerfile). अगर आप सिमलिंक का इस्तेमाल करने की कोशिश करेंगे तो भी यह काम नहीं करेगा ।

नोट: यह पॉज़िक्स (लिनक्स, यूनिक्स, मैक, संभवतः विंडोज के लिए लिनक्स सबसिस्टम) के लिए विशिष्ट है । आप जंक्शन का उपयोग करके विंडोज में भी ऐसा ही कर सकते हैं ।

cd ~/your_docker_project/cp -al /subfolder/src_directory ./echo "COPY src_directory /subfolder/" >> Dockerfile

खतरा: इसका उपयोग करने से आपका डॉकर प्रोजेक्ट होस्ट के लिए विशिष्ट हो जाएगा । आप लगभग ऐसा कभी नहीं करना चाहते! देखभाल के साथ संभाल ।

आवेदन: सीखना, विकास के माहौल में प्रयोग करना

यह मेरे लिए चाल थी । सीपी-अल निर्देशिका संरचना की प्रतिलिपि बनाता है और सभी फाइलों के लिए हार्ड लिंक बनाता है । जब आप कर रहे हैं रन "आरएम-आरएफ । /एसआरसी_निर्देशिका " इसे हटाने के लिए ।

निम्नलिखित त्रुटि के लिए,

COPY failed: stat

मैंने इसे डॉकर सेवा को पुनरारंभ करके चारों ओर प्राप्त किया ।

एक अलग निर्देशिका से डॉकर फ़ाइल को चलाने का प्रयास करते समय मेरे साथ ऐसा हुआ ।

मैं था COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory और डॉकर फ़ाइल निर्दिष्ट करके इसे हल करने में कामयाब रहे ।

चल रहा है docker build . -f docker/development/Dockerfile काम किया ।

लेकिन चल रहा है Runningडोकर का निर्माण गोदी श्रमिक/विकास/Dockerfile` की वजह से इस मुद्दे पर.

-f या --file का नाम और स्थान निर्दिष्ट करने के लिए Dockerfile.

यह पहली बार में यह अजीब पाया क्योंकि जब मैं था Dockerfile ऐप्स रूट डायरेक्टरी में इसने ठीक काम किया । यह मदद करेगा यदि आप अपने पर्यावरण डॉकर फ़ाइलों को थोड़ा बेहतर प्रबंधित करना चाहते हैं ।

जो भी रुचि रखता है, उसके लिए।गिटिग्नोर भी समस्या पैदा कर सकता है । मेरे मामले में, यार्न।लॉक को नजरअंदाज किया गया । और इसने इसी तरह की त्रुटि फेंक दी ।

मेरे लिए समस्या यह थी कि मैं जो फ़ाइल नाम जोड़ रहा था, उसमें एक अनुगामी स्थान था । एक नाम बदलने यह तय.

मैंने आखिरकार इस मुद्दे को हल किया मेरे मामले में डॉकरफाइल था जो प्रतिलिपि निष्पादित करता है वह गहरे स्तर पर था project.So मुझे एहसास हुआ कि मेजबान का निर्माण पथ डॉकरफाइल के फ़ाइल स्थान के सापेक्ष व्यक्त किया गया है ।

2017 में किसी मुद्दे की तलाश करने वालों के लिए - यह आपका मुद्दा हो सकता है /var/lib/docker/tmp/docker-builderXXXXXXX/... no such file or directory · Issue #1922 · docker/for-mac · GitHub । यह आपको हटाने की सिफारिश करता है । dockerignore फ़ाइल और retesting. यदि वह काम करता है तो आप अपनी सेटिंग्स के साथ बेला कर सकते हैं । इस मुद्दे को हल करने के लिए डॉकरिग्नोर।