2015-08-26 25 views
5

Tôi đã thử rất nhiều sự kết hợp với các tùy chọn -f Docker nhưng tôi chưa bao giờ nhận được nó để làm việcDocker xây dựng với tùy chọn -f không thể tìm thấy Dockerfile

tôi có thể làm điều này:

docker build -t foo/bar . 

Nhưng tôi không thể làm điều này:

docker build -t foo/bar -f Dockerfile . 

hay này:

docker build -t foo/bar -f ./Dockerfile . 

này mang lại cho tôi những lỗi sau:

unable to prepare context: The Dockerfile (c:\path\Dockerfile) must be within the build context (.) 

Tôi đang sử dụng Docker qua vm mặc định trên Windows 7. Phiên bản Docker là 1.8.1, xây dựng d12ea79

Tôi không thể nhìn thấy sự khác biệt. Nó có thể là rất tốt đẹp để có Dockerfiles khác nhau cho các nhiệm vụ khác nhau trên một dự án, nhưng không có tùy chọn -f đó là thực sự không thể.

Trả lời

-1

nếu bạn làm

docker build --help 

bạn sẽ nhận thấy, trong số những thứ khác

-f, --file=      Name of the Dockerfile (Default is 'PATH/Dockerfile') 

bạn có thể làm một trong hai

docker build -t mytag . 

hoặc

docker build -t mytag -f another_dockerfile 

nhưng bạn không thể sử dụng .-f cùng nhau.

Đó là ., hoặc Dockerfile với -f, không phải cả hai

+2

Docker: "xây dựng" yêu cầu 1 cuộc tranh cãi. Xem 'c: \ Program Files \ Docker Toolbox \ docker.exe build --help'. Cách sử dụng: docker build [OPTIONS] PATH | URL | - Tạo hình ảnh mới từ mã nguồn tại PATH – AnAmuser

+0

Đó là câu trả lời khi xây dựng được chạy mà không có PATH – AnAmuser

+0

nếu dockerfile của bạn nằm trong thư mục hiện tại của bạn, bạn chỉ cần chạy 'docker build .' – user2915097

1

Dưới đây là một ví dụ về cách tôi đã sử dụng Docker xây dựng để tránh lỗi này

Docker xây dựng my.dockerfile -f ./

Lưu ý các dấu dấu gạch chéo

+1

Không chắc chắn lý do tại sao điều đó sẽ tạo ra sự khác biệt trong trường hợp này –

+0

Nếu tôi không chỉ định dấu gạch chéo phía trước thì nó sẽ không hoạt động. Bằng cách nào đó. không hợp lệ như ngữ cảnh. Tôi có kinh nghiệm này chạy Docker natively trên Linux và OSX. – Rusty1

+1

Có thể nó làm việc cho bạn, nhưng có vẻ như một trường hợp cạnh kỳ lạ –

0

tôi nhấn vấn đề này, và nó chỉ ra rằng nó được gây ra bởi dockerfile của tôi là trên một đĩa gắn kết như là một thư mục trong NTFS. Khi tôi chuyển nó vào một thư mục thông thường, nó hoạt động tốt.

0

Nếu số Dockerfile của bạn không nằm trong thư mục gốc của dự án (thư mục hiện tại), hãy hiển thị nó sau số -f.

Dưới đây là một ví dụ tôi sử dụng:

docker build -t test_service -f deployment/dev/Dockerfile . 
0

Sắp tới trong một chút trễ ở đây nhưng tôi chạy vào vấn đề này ngày hôm qua. Về cơ bản, khi sử dụng dấu chấm (.), bạn đang thiết lập thư mục hiện tại làm thư mục làm việc - nếu bạn đang sử dụng cờ -f thì rất có thể điều đó không đúng.Vì vậy, bạn cần phải làm như sau:

docker build -f /path/to/Dockerfile /path/to/ 

Lưu ý /path/to/ thay thế .. Điều này đặt kịch bản docker trong bối cảnh bên phải. Bạn có thể sử dụng bất kỳ cờ nào khác (như -t) nếu cần.

docker build -t foo/bar -f /path/to/Dockerfile /path/to/ 

Điều này làm việc cho tôi như một sự quyến rũ.

0

Vâng, khi thông báo lỗi cho bạn biết, Dockerfile của bạn không nằm trong số context, là thư mục hiện tại (.) trong trường hợp của bạn.

Ý tưởng là file Docker bạn chỉ định với -f phải lúc nào cũng nằm trong bối cảnh bạn chỉ định.

Vì vậy, thông thường điều này sẽ làm việc tốt:

docker build -f /path/to/context/dir/Dockerfile /path/to/context/dir 

Và điều này quá:

cd /some/dir 
docker build -f /some/dir/customDir/Custom-Dockerfile-name . 

Trong khi, điều này sẽ thất bại:

docker build -f /path/to/diff/dir/Dockerfile /path/to/context/dir 

Từ đầu ra của bạn, c:\path\Dockerfile không phải là trong số . (nghĩa là không nằm trong thư mục làm việc hiện tại của bạn)

tin chi tiết về các Docs, giải phẫu lệnh là:

docker build [OPTIONS] PATH | URL | - 

The docker build command builds Docker images from a Dockerfile and a “context”. A build’s context is the set of files located in the specified PATH or URL

Và:

By default the docker build command will look for a Dockerfile at the root of the build context. The -f, --file, option lets you specify the path to an alternative file to use instead. This is useful in cases where the same set of files are used for multiple builds. The path must be to a file within the build context. If a relative path is specified then it is interpreted as relative to the root of the context.

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