Không thể tạo hình ảnh docker cho COPY không thành công: lỗi stat / var / lib / docker / tmp / docker-builder


86

Tôi muốn tạo một hình ảnh docker. Đây là thư mục công việc của tôi: Dockerfile.in test.json test.py

Và đây là Dockerfile của tôi:

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

RUN python test.py

Khi tôi khởi chạy lệnh này: docker build -f Dockerfile.in -t 637268723/test:1.0 .

Nó cho tôi lỗi này:

`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`

Ai giúp tôi với?


12
Test.py hoặc * .py có trong dockerignore của bạn không?
Jay Dorsey

3
Test.py có sẵn trong thư mục hiện tại nơi Docker lưu trữ các danh sách thoát không.
Jinna Balu

5
Bạn đã bao giờ giải quyết điều này? Có cùng một vấn đề.
emmdee

2
Docker vẫn trình bày các hành vi lỗi trên công cụ của nó, imho. Tôi đã sử dụng cùng một COPYcâu lệnh trên Dockerfile của mình và gặp vấn đề tương tự. Đã thử COPY /host_file /container_folder(không có dấu chấm), và nó hoạt động. Sau đó, hãy thử cái cũ COPYmà bạn có ở đây và nó hoạt động bình thường (wtf?)! Một điều mà tôi đã làm khác đi, đó là xóa tất cả hình ảnh (bộ nhớ cache) mà Docker tạo ra trong quá trình xây dựng. Tôi đoán, là thùng rác có thể vẫn được lưu trữ trên các hình ảnh trung gian này (tôi đang sử dụng Docker 18.09.5). Hãy xem SO hoặc GitHub, RẤT NHIỀU vấn đề về 'sao chép máy chủ lưu trữ -> vùng chứa. Điềm xấu.
ivanleoncz

1
Wow man, ivanleoncz cảm ơn bạn, tôi đã giải quyết vấn đề này. Tôi đã có mệnh đề này: ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar và tôi đặt một dấu gạch chéo đơn giản trước mcint_swagger_hub-1.0.0.jar, vì vậy bây giờ tôi nhận được cái này: ADD /mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar và tôi không gặp vấn đề gì. Cảm ơn nhé người anh em!! Chúa ban phước cho bạn
Richard Rebeco

Câu trả lời:


50

Bạn nên đặt các tệp đó vào cùng một thư mục với Dockerfile.


Bởi vì tôi đang sử dụng 'from python: 2.7-onbuild', nó vẫn sao chép tất cả các tệp anh chị em và tệp con từ vị trí Dockerfile. Vì vậy, cuối cùng tôi đã xóa các dòng COPY khỏi Dockerfile và các tệp là tệp anh em cũng được sao chép.
Kuba

2
Nếu điều này không hiệu quả, hãy kiểm tra .dockerignoretệp của bạn !
Kenny Evitt

42

Kiểm tra xem có .dockerignoretệp không, nếu có, hãy thêm:

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

2
Cái này phù hợp với tôi, toàn bộ thư mục bị bỏ qua, sau đó docker không tạo được hình ảnh, gây ấn tượng xấu khiến tôi phát điên về đường dẫn tệp.
Marco Medrano

Cái này cũng có tác dụng với tôi. Trong trường hợp của tôi, thư mục tôi đang đề cập là .dockerignore, vì vậy hãy xóa khỏi nó.
Durga P. Kapa

11
  1. Q1: Kiểm tra .dockerignoretệp của bạn trong đường dẫn xây dựng, các tệp hoặc dir bạn muốn sao chép có thể nằm trong danh sách tệp bỏ qua!
  2. Câu hỏi 2: Chỉ thị COPY dựa trên ngữ cảnh mà bạn đang xây dựng hình ảnh, vì vậy hãy lưu ý mọi vấn đề với thư mục mà bạn hiện đang xây dựng hình ảnh! Xem: https://docs.docker.com/engine/reference/builder/#copy

.dockerignore là nguyên nhân gốc rễ cho vấn đề của tôi!
Ming Zhu

6

Xóa ./khỏi đường dẫn nguồn sẽ giải quyết được sự cố của bạn:

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

4
trong trường hợp may tôi đặt chúng trong Docker bỏ qua oh no: D
Adiii

@Mugen vui vì nhận xét của tôi tiết kiệm cuộc sống của bạn;)
Adiii

1
@Adiii bạn cũng đã cứu mạng tôi.
MonkeySeeMonkeyDo

4

Tôi cũng gặp phải vấn đề tương tự, tôi đã di chuyển tệp docker của mình sang thư mục gốc của dự án. sau đó nó hoạt động


4

Tôi đã phải sử dụng lệnh sau để bắt đầu xây dựng:

docker build .


2

Trong trường hợp của bạn, việc xóa ./ sẽ giải quyết được vấn đề. Tôi đã gặp một trường hợp khác, trong đó tôi đang sử dụng một thư mục từ thư mục mẹ và docker chỉ có thể truy cập các tệp có mặt bên dưới thư mục có Dockerfile, vì vậy nếu tôi có cấu trúc thư mục / root / dir và Dockerfile / root / dir / Dockerfile

Tôi không thể sao chép làm như sau

COPY root/src /opt/src

1
Vấn đề của riêng tôi hơi khác một chút, nhưng "vấn đề" của Docker với các đường dẫn kỳ lạ khi tham chiếu một tệp phía trên thư mục chứa Dockerfile là vấn đề THANKS ! [Windows 10 + Powershell].
RichW

1

Điều này có thể giúp những người khác gặp phải vấn đề tương tự.

Thay vì đặt tệp trôi nổi trong cùng thư mục với Dockerfile, hãy tạo một tệp dir và đặt tệp để sao chép và sau đó thử.

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

Đây có phải là một lỗi? Ai đó đã tìm ra lý do tại sao điều này hoạt động? Đây là điều duy nhất mà giúp
Elijas Dapšauskas

1

Một nguyên nhân tiềm ẩn khác là do docker sẽ không theo các liên kết tượng trưng theo mặc định (tức là không sử dụng ln -s).


1

Trong trường hợp của tôi, đó là dòng nhận xét đã làm rối loạn lệnh COPY

Tôi đã xóa nhận xét sau lệnh COPY và đặt nó vào một dòng dành riêng phía trên lệnh. Đáng ngạc nhiên là nó đã giải quyết được vấn đề.

Lệnh Dockerfile bị lỗi

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

Lệnh Dockerfile đang làm việc

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

Hy vọng nó sẽ giúp một ai đó.


1

Đảm bảo rằng bối cảnh bạn xây dựng hình ảnh của mình được đặt chính xác. Bạn có thể đặt bối cảnh khi xây dựng làm đối số. Ví dụ: docker build -f ./Dockerfile ..trong đó '..' là ngữ cảnh trong ví dụ này.


0

Khi sử dụng Docker soạn tệp, xuất bản, xuất bản lên obj / Docker / Publish. Khi tôi sao chép các tệp của mình vào đó và trỏ Dockerfile của tôi vào thư mục này (như được tạo), nó hoạt động…


0

Cách docker tìm kiếm tệp là từ thư mục hiện tại, tức là nếu lệnh của bạn là

SAO CHÉP target / xyz.jar app.jar

THÊM target / xyz.jar app.jar

Bình xyz phải nằm trong thư mục hiện tại / đích - đây là nơi chứa tệp docker của bạn. Vì vậy, nếu bạn có docker trong một dir khác. tốt hơn là đưa đến thư mục dự án chính và có một đường dẫn thẳng đến jar được thêm hoặc sao chép vào hình ảnh.


0

Tôi đã gặp vấn đề tương tự với tệp .tgz.

Nó chỉ là về vị trí của tệp. Đảm bảo tệp nằm trong cùng thư mục của Dockerfile.

Đồng thời đảm bảo thư mục tệp .dockerignore không loại trừ mẫu regex tệp.


0

Trong trường hợp của tôi, tôi phải đặt tất cả các tệp dự án của mình vào một thư mục con

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

Sau đó, tôi đã sao chép các tệp theo cách của anh ấy

COPY app ./

-1

Đây là lý do tại sao nó xảy ra, tức là thư mục cục bộ của bạn trong hệ điều hành máy chủ nơi bạn đang chạy docker phải có tệp, nếu không bạn sẽ gặp lỗi này

Một giải pháp là: sử dụng RUN cp <src> <dst>thay vì COPY <src> <dst>

sau đó chạy lệnh nó hoạt động!


1
Xin chào, Nishant! Sẽ rất xứng đáng để trình bày giải pháp của bạn với nhiều chi tiết hơn. Sao chép tệp từ máy chủ sang vùng chứa, vẫn là một cái gì đó phức tạp trên Docker. Vui lòng cho ví dụ để làm rõ câu trả lời của bạn. Trân trọng :)
ivanleoncz

-1

Cấu trúc sau trong docker-compo.yaml sẽ cho phép bạn có Dockerfile trong thư mục con từ thư mục gốc:

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: ...
...

Sau đó, trong Dockerfile của bạn, nằm trong cùng thư mục với docker-compos.yaml, bạn có thể thực hiện như sau:

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}

Sau đó, bạn có thể chạy docker-compile từ thư mục mẹ như:

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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.