Docker build cho biết "không thể chuẩn bị ngữ cảnh: ngữ cảnh phải là một thư mục: / Users / tempUser / git / docker / Dockerfile"


93

Tôi có một Dockerfilethứ được cho là để xây dựng Ubuntuhình ảnh. Nhưng bao giờ tôi chạy

docker build -t ubuntu-test:latest ./Dockerfile

Nó hiển thị lỗi sau trên bảng điều khiển

không thể chuẩn bị ngữ cảnh: ngữ cảnh phải là một thư mục: / Users / tempUser / git / docker / Dockerfile

Tôi đang sử dụng Mac OsX. Tôi cũng đã cố gắng sudo. Không có gì hoạt động.

Câu trả lời:


142

Thay vào đó, bạn cần trỏ đến thư mục . Bạn không được chỉ định tệp dockerfile.

docker build -t ubuntu-test:latest .không hoạt động .

docker build -t ubuntu-test:latest ./Dockerfilekhông không hoạt động .


Tại sao nó như thế này? có vẻ như xa lạ với cần để trỏ đến một thư mục khi bạn có thể dễ dàng có nó trỏ đến tập tin bản thân
Monica Heddneck

72

Bạn cũng có thể chạy bản dựng docker với -ftùy chọn

docker build -t ubuntu-test:latest -f Dockerfile.custom .


1
Điều này đã làm việc cho tôi. Tên Dockerfile trong trường hợp của tôi là Dockerfile-abcd vì vậy tôi phải kích hoạt:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale

17

Để chỉ định Dockerfilethời điểm xây dựng, bạn có thể sử dụng:

docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile

Nhưng nó sẽ không thành công nếu có ADDhoặc COPYlệnh phụ thuộc vào đường dẫn tương đối. Có nhiều cách để chỉ định một contextfor docker build, bạn có thể tham khảo tài liệu về bản dựng docker để biết thêm thông tin.


Phương pháp này có cho ubuntu 12.04 : docker build -t ubuntu:12.04 - < DockerfileBạn phải nằm trong thư mục gốc của Dockerfile
Dominic Motuka

15

Hiểu ngữ cảnh

các docker buildlệnh

Cú pháp cơ bản của lệnh xây dựng của docker là

docker build -t imagename:imagetag context_dir

Bối cảnh

Bối cảnh là một thư mục và xác định những gì quá trình xây dựng docker sẽ thấy: Theo quan điểm của Dockerfile, bất kỳ tệp nào context_dir/mydir/myfiletrong hệ thống tệp của bạn sẽ trở thành /mydir/myfiletrong Dockerfile và do đó trong quá trình xây dựng.

Dockerfile

Nếu dockerfile được gọi Dockerfilevà sống trong ngữ cảnh, nó sẽ được tìm thấy một cách ngầm định theo quy ước đặt tên. Điều đó thật tuyệt, vì nó có nghĩa là bạn thường có thể tìm thấy Dockerfile trong bất kỳ vùng chứa docker nào ngay lập tức.

Nếu bạn khăng khăng muốn sử dụng tên khác, nói "/ tmp / mydockerfile", bạn có thể sử dụng -fnhư sau:

docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir

nhưng khi đó dockerfile sẽ không nằm trong cùng một thư mục hoặc ít nhất là sẽ khó tìm hơn.


2

Thật đơn giản, bất cứ khi nào bản dựng Docker được chạy, docker muốn biết tên hình ảnh là gì, vì vậy chúng ta cần truyền -t :. Bây giờ hãy đảm bảo rằng bạn đang ở trong cùng một thư mục nơi bạn có Dockerfile của mình và chạy

docker build -t <image_name>:<version> . Ví dụ docker build -t my_apache:latest .giả sử bạn đang ở trong cùng một thư mục với Dockerfile của bạn, nếu không thì pass -f cờ và Dockerfile.

docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile


Để nhận được rằng lệnh thứ hai để chạy cho tôi, tôi đã phải thay đổi nó một chút: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(lưu ý việc bổ sung một .ở cuối)
Josh

2

Tôi phải đối mặt với cùng một vấn đề. Tôi đang sử dụng docker version:17.09.0-ce.

Tôi làm theo các bước sau:

  1. Tạo Dockerfile và các lệnh đã thêm để tạo hình ảnh docker
  2. Chuyển đến thư mục nơi chúng tôi đã tạo Dockfile
  3. thực hiện lệnh dưới đây $ sudo docker build -t ubuntu-test:latest .

Nó đã giải quyết vấn đề và hình ảnh được tạo thành công.

Lưu ý: lệnh xây dựng phụ thuộc vào phiên bản docker cũng như tùy chọn xây dựng mà chúng tôi đang sử dụng. :)


1

Một trong những lý do khiến tôi gặp lỗi là tên tệp đảm bảo tên tệp là Dockerfile Vì vậy, tôi đã tìm ra nó, hy vọng nó có thể giúp được ai đó.

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.