2015-01-21 19 views
11

Tất cả, tôi đang cố gắng sao chép liên tục các tệp từ máy chủ của tôi sang hình ảnh để các tệp đó có sẵn với mọi vùng chứa được khởi chạy dựa trên hình ảnh đó. Chạy trên debian wheezy 64bit như khách ảo.Hướng dẫn COPerfile COPY không thành công?

các Dockerfile là khá đơn giản (cài đặt hình ảnh quãng tám):

FROM debian:jessie 
MAINTAINER GG_Python <[redacted]@gmail.com> 
RUN apt-get update 
RUN apt-get update 
RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics 

RUN mkdir /octave 
RUN mkdir /octave/libs 
RUN mkdir /octave/libs/jsonlab 
COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/. 

Tôi nhận được dấu vết sau đây sau khi phát hành một xây dựng lệnh: docker build -t octave .

Sending build context to Docker daemon 423.9 kB 
Sending build context to Docker daemon 
Step 0 : FROM debian:jessie 
---> 58052b122b60 
Step 1 : MAINTAINER GG_Python <[..]@gmail.com> 
---> Using cache 
---> 90d2dd2f7ee8 
Step 2 : RUN apt-get update 
---> Using cache 
---> 4c72c25cd829 
Step 3 : RUN apt-get update 
---> Using cache 
---> b52f0bcb9f86 
Step 4 : RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics 
---> Using cache 
---> f0637ab96d5e 
Step 5 : RUN mkdir /octave 
---> Using cache 
---> a2d278b2819b 
Step 6 : RUN mkdir /octave/libs 
---> Using cache 
---> 65efbbe01c99 
Step 7 : RUN mkdir /octave/libs/jsonlab 
---> Using cache 
---> e41b80901266 
Step 8 : COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/. 
INFO[0000] ~/octave/jsonlab/loadjson.m: no such file or directory 

Docker hoàn toàn từ chối để sao chép tập tin này từ máy chủ lưu trữ vào hình ảnh. Không cần phải nói rằng loadjson.m tập tin là có (cat hiển thị), tất cả các nỗ lực của tôi để thay đổi đường dẫn (tương đối, tuyệt đối, vv) thất bại. Bất kỳ lời khuyên nào tại sao nhiệm vụ đơn giản này lại có vấn đề?

+0

Với mkdir bạn có thể sử dụng tùy chọn -p để tạo ra tất cả chúng trong một đi: mkdir -p/quãng tám/libs/jsonlab – dalore

+0

Và cũng 3 dòng đầu tiên nên được kết hợp vào một RUN – dalore

Trả lời

11

Docker không mở rộng ~ hoặc $ HOME. Bạn có thể cần tham chiếu tệp một cách rõ ràng hoặc đóng gói nó tương ứng với chính Dockerfile.

+0

CÔNG TRÌNH! Tôi đã sao chép tệp vào cùng thư mục với Dockerfile và cẩn thận với thư mục đích (phải có dấu gạch chéo ngược nhưng "/." Làm tệp đích không thành công). Dường như docker rất kén chọn với thao tác này .. –

+1

Thật kỳ lạ, sử dụng đường dẫn rõ ràng tới tệp nguồn không hoạt động cho tôi - ngay cả khi nó ở cùng vị trí với Dockerfile. Tôi đã xóa đường dẫn đến tệp nguồn và nó hoạt động. – ben

8

Bộ điều hợp chỉ có thể sao chép tệp từ ngữ cảnh, thư mục bạn đang trừ bất kỳ tệp nào được liệt kê trong tệp dockerignore.

Khi bạn chạy trình docker 'docker build', nó sẽ chuyển ngữ cảnh và nó sẽ gửi nó đến docker daemon mà bạn đã kết nối. Nó chỉ cho phép bạn sao chép các tập tin bên trong ngữ cảnh bởi vì daemon có thể là một máy từ xa.

+3

Đây là trường hợp của tôi, tôi đã làm việc trên một dự án cũ, tôi nhận ra rằng tôi đã có một quy tắc "*" trong một '.dockerignore', cảm ơn rất nhiều – gsalgadotoledo

3

tôi có thể không nhận được COPY để làm việc cho đến khi tôi hiểu được ngữ cảnh (Tôi đã cố gắng để sao chép một tập tin từ bên ngoài bối cảnh)

Các Docker build lệnh xây dựng một hình ảnh từ một Dockerfile và một bối cảnh . Ngữ cảnh của bản dựng là các tệp tại một vị trí được chỉ định PATH. PATH là một thư mục trên hệ thống tệp cục bộ của bạn.

Ngữ cảnh được xử lý đệ quy. Vì vậy, một PATH bao gồm bất kỳ thư mục con nào.

Bản dựng được chạy bởi trình nền Docker, chứ không phải bởi CLI. Điều đầu tiên mà quá trình xây dựng thực hiện là gửi toàn bộ ngữ cảnh (đệ quy) tới daemon. Trong hầu hết các trường hợp, tốt nhất là bắt đầu với một thư mục trống dưới dạng ngữ cảnh và giữ Dockerfile của bạn trong thư mục đó. Chỉ thêm các tệp cần thiết để xây dựng Dockerfile.

Cảnh báo: Không sử dụng thư mục gốc của bạn, /, làm PATH vì nó làm cho quá trình xây dựng chuyển toàn bộ nội dung của ổ cứng sang trình nền Docker.

tham khảo: https://docs.docker.com/engine/reference/builder/#usage

Các vấn đề liên quan