COPY के लिए डॉक छवि नहीं बना सकता है: स्टेट / var / lib / docker / tmp / docker-बिल्डर त्रुटि


87

मैं डॉकटर इमेज बनाना चाहता हूं। यह मेरी कार्य निर्देशिका है: Dockerfile.in test.json test.py

और यह मेरा डॉकफाइल है:

COPY ./test.json /home/test.json
COPY ./test.py /home/test.py

RUN python test.py

जब मैं यह कमांड लॉन्च करता हूं: docker build -f Dockerfile.in -t 637268723/test:1.0 .

यह मुझे यह त्रुटि देता है:

`Step 1/5 : COPY ./test.json /home/test.json
 ---> Using cache
 ---> 6774cd225d60
 Step 2/5 : COPY ./test.py /home/test.py
 COPY failed: stat /var/lib/docker/tmp/docker-builder428014112/test.py: 
 no such file or directory`

क्या कोई मेरी मदद कर सकता है?


12
क्या आपके डॉकिनरोर में test.py या * .py है?
जे डोरसे

3
परीक्षण निर्देशिका वर्तमान निर्देशिका में उपलब्ध है, जहां डॉकर ने एक्ज़स्टस्ट दर्ज किया है।
जिना बलू

5
क्या आपने कभी इसे हल किया? एक ही समस्या होने।
एम्मी

2
डॉकर अभी भी यह इंजन, इम्हो पर छोटी गाड़ी व्यवहार प्रस्तुत करता है। मैंने COPYअपने डॉकेरफाइल पर उसी कथन का उपयोग किया , और वही मुद्दे थे। कोशिश की COPY /host_file /container_folder(डॉट के बिना), और यह काम किया। इसके बाद, पूर्व की कोशिश करें COPYकि आप यहाँ हैं, और यह सामान्य रूप से काम करता है (wtf?) एक चीज जो मैंने अलग-अलग बनाई थी, वह थी कि सभी छवियों (कैश) को हटा दें जो डॉकर निर्माण प्रक्रिया पर उत्पन्न करता है। मेरा अनुमान है, यह कचरा अभी भी इन मध्यस्थ छवियों पर संग्रहीत किया जा सकता है (मैं डॉकर 18.09.5 का उपयोग कर रहा हूं)। SO या GitHub पर एक नज़र डालें, SO MANY 'होस्ट - कॉपी करने वाले कंटेनर' के बारे में समस्याएँ बताता है। अपशकुन।
ivanleoncz

1
वाह यार, ivanleoncz शुक्रिया, मैंने इस समस्या को हल किया। मेरे पास यह क्लॉज़ था: ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar और मैं mcint_swagger_hub-1.0.0-jaz से पहले एक साधारण स्लैश डालता हूं। यह मिला: ADD /mcint_swagger_hub-1.0.0.jar/opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0 .jar और मुझे कोई समस्या नहीं है। धन्यवाद भाई!! गॉड ब्लेस
यू

जवाबों:


52

आपको उन फ़ाइलों को डॉकरफाइल के साथ एक ही डायरेक्टरी में रखना चाहिए।


चूँकि मैं I पायथन से: २. it-ऑनबिल्ड ’का उपयोग कर रहा था, इसने वैसे भी डॉकफ़राइल स्थान से सभी सिबलिंग और चाइल्ड फ़ाइलों की नकल की। इसलिए, मैंने आखिरकार Dockerfile से COPY लाइनें हटा दीं और सिबलिंग फ़ाइलों के रूप में फ़ाइलों की प्रतिलिपि बनाई गई।
कुबा

2
यदि यह काम नहीं करता है, तो अपनी .dockerignoreफ़ाइल की जाँच करें !
केनी एविट

इसने मेरे लिए काम किया।
cnu

42

जांचें कि क्या कोई .dockerignoreफ़ाइल है, यदि ऐसा है, तो जोड़ें:

!mydir/test.json
!mydir/test.py

2
इसने मेरे लिए काम किया, पूरे फ़ोल्डर को नजरअंदाज कर दिया गया, फिर डॉकटर ने फ़ाइल के बारे में मुझे पागल बनाने वाली एक बुरी धारणा देते हुए छवि बनाने में विफल रहा।
मार्को मेड्रानो

यह मेरे लिए भी काम किया। मेरे मामले में मैं जिस फोल्डर का जिक्र कर रहा था, वह .dockerignore में था, इसलिए इसे हटा दिया गया।
दुर्गा पी। कापा

11
  1. Q1: .dockerignoreबिल्ड फ़ाइल में अपनी फ़ाइल की जाँच करें , जिन फ़ाइलों या डायर को आप कॉपी करना चाहते हैं, वे अनदेखी फ़ाइल सूची में हो सकती हैं!
  2. Q2: COPY निर्देश उस संदर्भ पर आधारित है जिसमें आप छवि बना रहे हैं, इसलिए उस निर्देशिका के साथ किसी भी समस्या से अवगत रहें जहाँ आप वर्तमान में छवि बना रहे हैं! देखें: https://docs.docker.com/engine/reference/builder/#copy

.dockerignore मेरे मुद्दे का मूल कारण है!
मिंग झू

7

./स्रोत पथ से हटाने से आपकी समस्या का समाधान हो जाना चाहिए:

 COPY test.json /home/test.json
 COPY test.py /home/test.py

4
हो सकता है कि मामले में मैं उन्हें
docker में

@ मुजेन को खुशी हुई कि मेरी टिप्पणी से आपकी जान
बची

1
@Adiii आपने मेरी भी जान बचाई।
मंकीसेमोनिकोडो

4

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


4

मुझे बिल्ड शुरू करने के लिए निम्न कमांड का उपयोग करना पड़ा:

docker build .


2

आपके मामले को हटाने में / समस्या को हल करना चाहिए। मेरे पास एक और मामला था जिसमें मैं मूल निर्देशिका से एक निर्देशिका का उपयोग कर रहा था और डॉकर्स केवल उस निर्देशिका के नीचे मौजूद फ़ाइलों तक पहुंच सकता है जहां डॉकफ़र मौजूद है मेरे पास है यदि मेरे पास निर्देशिका संरचना / रूट / dir और Dockerfile / रूट / d / dockerfile है

मैं निम्नलिखित को कॉपी नहीं कर सकता

COPY root/src /opt/src

1
मेरा अपना समस्या थोड़ा अलग था, लेकिन डोकर की अजीब रास्तों के साथ "मुद्दा" जब Dockerfile वाले फ़ोल्डर के ऊपर एक फ़ाइल को संदर्भित मुद्दा था धन्यवाद ! [विंडोज 10 + पॉवर्सशेल]।
रिचव जू।

1

यह किसी और को इसी तरह के मुद्दे का सामना करने में मदद कर सकता है।

फाइल को उसी निर्देशिका में तैरने के बजाय डॉकरफाइल के रूप में डालें, एक डायर बनाएं और फाइल को कॉपी करने के लिए रखें और फिर कोशिश करें।

COPY mydir/test.json /home/test.json
COPY mydir/test.json /home/test.json

क्या यह एक बग है? क्या किसी ने सोचा कि यह क्यों काम करता है? यह एकमात्र ऐसी चीज थी जिसने मदद की
एलिजस डाफॉसकस

1

एक और संभावित कारण यह है कि डॉक डिफ़ॉल्ट रूप से प्रतीकात्मक लिंक का पालन नहीं करेगा (यानी उपयोग न करें ln -s)।


1

मेरे मामले में, यह टिप्पणी लाइन थी जो COPY कमांड को गड़बड़ कर रही थी

मैंने COPY कमांड के बाद टिप्पणी को हटा दिया और इसे कमांड के ऊपर एक समर्पित लाइन पर रख दिया। हैरानी की बात यह है कि इस मुद्दे को हल किया।

दोषपूर्ण Dockerfile कमांड

COPY qt-downloader .     # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions

वर्किंग डॉकरीफाइल कमांड

# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions
COPY qt-downloader .     

आशा है कि यह किसी की मदद करता है।


1

सुनिश्चित करें कि आप जिस संदर्भ के साथ अपनी छवि बनाते हैं, वह सही तरीके से सेट है। आप तर्क के रूप में निर्माण करते समय संदर्भ सेट कर सकते हैं। उदाहरण: docker build -f ./Dockerfile ..जहां '..' इस उदाहरण में संदर्भ है।


0

डॉकर का उपयोग करते समय फ़ाइलों की रचना करें, प्रकाशित करें, प्रकाशित करें obj / Docker / प्रकाशित करें। जब मैंने अपनी फाइलों को वहां कॉपी किया और अपनी डॉकरीफाइल को इस निर्देशिका की ओर इंगित किया (जैसा कि उत्पन्न हुआ), तो यह काम करता है ...


0

फ़ाइल के लिए डॉक करने का तरीका वर्तमान निर्देशिका से है अर्थात यदि आपकी कमांड है

कॉपी लक्ष्य / xyz.jar app.jar

ADD लक्ष्य / xyz.jar app.jar

Xyz जार करंट / टारगेट डायरेक्टरी में होना चाहिए - यहाँ करंट वह जगह है जहाँ आपके पास आपकी डॉक फाइल है। तो अगर आप एक अलग dir में docker है। इसकी बेहतर परियोजना मुख्य निर्देशिका में लाती है और जार को सीधे जोड़ा जा सकता है या छवि में कॉपी किया जा सकता है।


0

मैं एक .tgz फ़ाइल के साथ एक ही मुद्दा था।

यह फ़ाइल के स्थान के बारे में था। सुनिश्चित करें कि फ़ाइल डॉकफाइल की उसी निर्देशिका में है।

यह भी सुनिश्चित करें कि .dockerignore फ़ाइल निर्देशिका फ़ाइल regex पैटर्न को बाहर न करे।


0

मेरे मामले में, मुझे अपनी सभी परियोजना फाइलों को एक उपनिर्देशिका में डालना था

app -|inside app directory we have the following
     | package.js
     | src 
     | assets
Dockerfile

फिर मैंने उसके तरीके से फाइलें कॉपी कीं

COPY app ./

0

डॉक इमेज बनाने और कंटेनर रजिस्ट्री में पुश करने के दौरान मुझे ऐसी त्रुटि हुई। अपने डॉक फ़ाइल के अंदर मैंने लक्ष्य फ़ोल्डर से एक जार फ़ाइल को कॉपी करने की कोशिश की और इसे java -jar कमांड के साथ निष्पादित करने का प्रयास किया।

मैं .jarign फ़ाइल से .jar फ़ाइल और लक्ष्य फ़ोल्डर को हटाकर समस्या को हल कर रहा था।


-1

यहीं कारण है कि ऐसा होता है, यानी होस्ट ओएस में आपकी स्थानीय निर्देशिका जहां आप डॉक कर रहे हैं, फ़ाइल होनी चाहिए, अन्यथा यह त्रुटि नहीं मिलती है

एक समाधान है: के RUN cp <src> <dst>बजाय का उपयोग करेंCOPY <src> <dst>

तो यह काम करता है कमान चलाने के लिए!


1
हाय, निशांत! यह अधिक विवरण के साथ अपने समाधान को व्यक्त करने के लिए योग्य होगा। मेजबान से कंटेनर में फ़ाइलों की प्रतिलिपि बनाएं, अभी भी डॉकर पर कुछ मुश्किल है। कृपया, अपना उत्तर स्पष्ट करने के लिए उदाहरण दें। सादर :)
ivanleoncz

-1

Docker-compose.yaml में निम्न संरचना आपको रूट से सबफ़ोल्डर में Dockerfile की अनुमति देगा:

version: '3'
services:
  db:
    image: postgres:11
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data
    ports:
      - 127.0.0.1:5432:5432
  **web:
    build: 
      context: ".."
      dockerfile: dockerfiles/Dockerfile**
    command: ...
...

फिर, आपके डॉकरीफाइल में, जो docker-compose.yaml के समान निर्देशिका में है, आप निम्न कार्य कर सकते हैं:

ENV APP_HOME /home

RUN mkdir -p ${APP_HOME}

# Copy the file to the directory in the container
COPY test.json ${APP_HOME}/test.json
COPY test.py ${APP_HOME}/test.py

# Browse to that directory created above
WORKDIR ${APP_HOME}

फिर आप मूल निर्देशिका से docker-compose चला सकते हैं जैसे:

docker-compose -f .\dockerfiles\docker-compose.yaml build --no-cache

-7
 <plugin>
    <groupId>io.fabric8</groupId>

    <artifactId>docker-maven-plugin</artifactId>
    <configuration>
      <images>
        <image>
          <name>imagenam</name>
          <alias>dockerfile</alias>
          <build>
            <!-- filter>@</filter-->
            <dockerFileDir>dockerfile loaction</dockerFileDir>
            <tags>
            <tag>latest</tag>
            <tag>0.0.1</tag>
            </tags>
          </build>
          <run>
            <ports>
              <port>8080:8080</port>
            </ports>
          </run>
        </image>
      </images>
    </configuration>
  </plugin>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.