không thể tạo một Dockerfile cụ thể


89

Tôi có thể xây dựng một Dockerfile như

docker build -t deepak/ruby .

Nhưng đối với tệp Dockerfile không được đặt tên Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

hãy để chúng tôi nói rằng nó được gọi là Dockerfile.app mà chúng tôi xây dựng với

docker build -t deepak/app Dockerfile.app

sau đó tôi nhận được lỗi

Uploading context 0 bytes
Error build: EOF
EOF

15
Vì vậy, câu hỏi của bạn là, làm cách nào để tạo một tệp dockerfile nếu tên của tệp dockerfile không phải là Dockerfile?
Ken Cochrane

1
@KenCochrane vâng. đó là câu hỏi
Deepak

1
Nếu bạn chạy docker build --helpcó một dòng nơi bạn có thể tìm thấy những gì bạn đang tìm kiếm: -f, chuỗi --file Tên của Dockerfile (Mặc định là 'PATH / Dockerfile')
blasrodri

2
Bạn đã học Docker vào năm 2013. Đây là tầm nhìn xa.
mcan

Câu trả lời:


211

Chú ý có một dấu chấm .ở cuối cả hai lệnh.

docker build -f MyDockerfile.

Hoặc với một thẻ:

docker build -t mysuperimage -f MyDockerfile.


1
docker build -f Dockerfile.consumercho tôi lỗi "bản dựng docker" yêu cầu chính xác 1 đối số. Xem 'bản dựng docker --help'. Cách sử dụng: bản dựng docker [TÙY CHỌN] PATH | URL | -
kamal

12
@kamal bạn có nhận thấy dấu chấm ( .) ở cuối lệnh trên không?
Sateesh Pagolu

7
Chỉ nói - yêu cầu thêm. là chỉ đơn giản kích thích
myloginid

2
Các .không phải là một điều cần thiết. Lệnh xây dựng mất hai args viz. đường dẫn đến Dockerfile& đường dẫn đến contextthư mục. Vì vậy, chúng ta có thể làmdocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish


22

Tham số cuối cùng để xây dựng docker là đường dẫn xây dựng, khi bạn đặt .nó có nghĩa là đây là đường dẫn bạn sẽ tìm thấy Dockerfile. Khi bạn thay đổi nó thành Dockerfile.appnó sau đó sẽ thử và tìm kiếm Dockerfile.app/Dockerfile, điều này không chính xác.

Tôi không chắc liệu nó có còn hoạt động hay không, nhưng bạn đã từng có thể làm điều này.

$ docker build -t deepak/app - < Dockerfile.app

Hãy thử cách đó và xem nó có hữu ích không, nếu không, có thể mở sự cố docker để thêm lại tính năng này hoặc cập nhật tài liệu về cách sử dụng Dockerfile với tên khác.

Thông tin thêm tại đây: http://docs.docker.io/en/latest/commandline/command/build/


1
tôi đã thử một url và nó hoạt động. Đường dẫn cũng phải hoạt động theo tài liệu. sẽ gửi một lỗi.
deepak

5
theo tài liệu bạn đã chia sẻ (cảm ơn). docker build - < Dockerfilesẽ không cho phép tôi THÊM một tệp cục bộ. Nhưng đã thử nó ra và nó hoạt động
Deepak

2
nhưng tôi muốn cung cấp một Dockerfile khác và vẫn có ngữ cảnh tức là. Thêm các tập tin. vì vậy tôi sẽ gửi một lỗi
deepak

Điều này sẽ chỉ tạo một ngữ cảnh với một Dockerfile duy nhất trong đó. Tất cả các tệp hỗ trợ sẽ không phù hợp với ngữ cảnh.
itafire

12

Hãy thử dockerfeed . Nó sử dụng tính năng docker để xây dựng ngữ cảnh thông qua stdin. Tôi đã viết kịch bản để giải quyết chính xác vấn đề của bạn mà chính tôi đang gặp phải.

Để thay thế tệp Dockerfile bằng tệp khác, bạn làm như sau:

dockerfeed -d Dockerfile.app . | docker build -t deepak/ruby -

Và Voila. Dockerfeed đang làm giống như docker build. Nó đóng gói nguồn bằng Dockerfile của nó nhưng cho phép bạn hoán đổi Dockerfile cũ với một tệp mong muốn. Không có tệp nào được tạo trong quá trình này, không có nguồn nào được thay đổi. Kho lưu trữ tar được tạo ra được đưa vào docker, từ đó gửi nó xuống daemon docker.

Cập nhật: Đây là một câu trả lời hợp lệ ngày xưa khi không có -fcông tắc nào. Với phiên bản docker 1.5, tùy chọn này đã được giới thiệu. Bây giờ bạn có thể xây dựng, cung cấp một Dockerfile khác như thế này:

docker build -f other-Dockerfile .

5

Bạn cũng có thể thực hiện điều này bằng cách sử dụng docker-soạn.

Trong docker-compo.yml của bạn trong phần xây dựng, bạn có thể chỉ định thư mục mà bạn lưu trữ tệp dockerfile và tên thay thế của nó như sau:

build:
  context: "/path/to/docker/directory"
  dockerfile: "dockerfile-alternate-name"

docker-soạn


0

Giả sử rằng bạn đã cài đặt thành công hộp công cụ docker bao gồm docker-soạndocker-machine . Đây là docker-compo.yml của tôi

version: '2'
services: 
  web: ./www/python
  ports:
   - "5000:5000"

Và đây là trong Dockerfile

FROM python:3.4-alpine
ADD ./www/python /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Đảm bảo rằng các tệp đó nằm chính xác trong thư mục gốc. Khi bạn chạy docker-soạn lên thì bạn sẽ xây dựng hình ảnh cho web.


0

Trường hợp của tôi nằm trong /tmpthư mục và có rất nhiều tệp và docker hãy thử với các tệp khác nếu tôi vượt qua-f <Dockerfile.foo>

Giải pháp sạch sẽ và dễ dàng nhất (đối với tôi) là (đọc các dockerfeedcâu trả lời từ trên):

cat DockerFile.debian.foo | docker build -t debian.foo -

0

Người dùng Windows nên thử lệnh dưới đây:

docker build -f Absol_docker_file_path dot

ví dụ :

docker build -f D: \ Code \ core-api \ API_TEST.Dockerfile.

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.