tidak dapat membangun Dockerfile tertentu

94

Saya bisa membangun Dockerfile seperti

docker build -t deepak/ruby .

Tetapi untuk Dockerfile yang tidak bernama Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "[email protected]"

RUN ./bin/rails s

mari kita katakan itu disebut Dockerfile.app yang kita bangun dengan

docker build -t deepak/app Dockerfile.app

kemudian saya mendapatkan kesalahan

Uploading context 0 bytes
Error build: EOF
EOF
deepak
sumber
15
Jadi pertanyaan Anda adalah, bagaimana cara membuat dockerfile jika nama dockerfile tersebut bukan Dockerfile?
Ken Cochrane
1
@Kenen_id itulah pertanyaannya
deepak
1
Jika Anda menjalankan docker build --helpada baris di mana Anda dapat menemukan apa yang Anda cari: -f, --file string Nama Dockerfile (Defaultnya adalah 'PATH / Dockerfile')
blasrodri
2
Anda mempelajari Docker pada tahun 2013. Ini pandangan ke depan.
mcan

Jawaban:

220

Perhatikan ada titik .di akhir kedua perintah.

buruh pelabuhan membangun -f MyDockerfile.

Atau dengan tag:

buruh pelabuhan membangun -t mysuperimage -f MyDockerfile.

Andrzej Rehmann
sumber
2
docker build -f Dockerfile.consumermemberi saya kesalahan "buruh pelabuhan" membutuhkan tepat 1 argumen. Lihat 'docker build --help'. Penggunaan: docker build [OPTIONS] PATH | URL | -
kamal
14
@ Kamal apakah Anda melihat titik ( .) di akhir perintah di atas?
Sateesh Pagolu
7
Hanya mengatakan - perlu menambahkan. benar-benar menjengkelkan
myloginid
2
Itu .bukanlah hal yang wajib. Perintah build membutuhkan dua args yaitu. jalur ke Dockerfile& jalur ke contextdirektori. Jadi, kita bisa melakukannyadocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish
32

Ini bekerja

docker build doronaviguy/helloworld -f SomeDockerFile .

Dokumentasi pembuatan Docker

doron aviguy
sumber
2
Milik saya diperlukan -t untuk menambahkan tag.
musabaloyi
23

Parameter terakhir untuk membangun buruh pelabuhan adalah jalur pembangunan, bila Anda meletakkannya .berarti ini adalah jalur di mana Anda akan menemukan Dockerfile. Ketika Anda mengubahnya menjadi Dockerfile.appitu maka akan mencoba dan mencari Dockerfile.app/Dockerfile, yang tidak benar.

Saya tidak yakin apakah itu akan tetap berfungsi, tetapi Anda dulu dapat melakukan ini.

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

Cobalah dan lihat apakah itu membantu, jika tidak, mungkin buka masalah buruh pelabuhan untuk menambahkan fitur ini kembali, atau perbarui dokumentasi tentang cara menggunakan Dockerfile dengan nama yang berbeda.

Info lebih lanjut di sini: http://docs.docker.io/en/latest/commandline/command/build/

Ken Cochrane
sumber
1
saya telah mencoba url dan berhasil. Path juga harus bekerja sesuai dengan dokumen. akan melaporkan bug.
deepak
5
sesuai dengan dokumen yang Anda bagikan (terima kasih). docker build - < Dockerfiletidak mengizinkan saya untuk MENAMBAHKAN file lokal. Tetapi telah mencobanya dan berhasil
deepak
2
tetapi saya ingin memberikan Dockerfile yang berbeda dan masih memiliki konteks yaitu. TAMBAH file. jadi saya akan melaporkan bug
deepak
Ini hanya akan membuat konteks dengan satu Dockerfile di dalamnya. Semua file pendukung tidak akan masuk ke dalam konteks.
itsafire
13

Coba dockerfeed . Ia menggunakan fitur buruh pelabuhan untuk membangun konteks melalui stdin. Saya menulis naskah untuk mengatasi masalah Anda yang saya hadapi sendiri.

Untuk mengganti Dockerfile dengan yang berbeda Anda melakukannya seperti ini:

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

Dan voila. Dockerfeed melakukan hal yang sama seperti docker build. Ini mengemas sumber dengan Dockerfile tetapi memungkinkan Anda menukar Dockerfile lama dengan yang diinginkan. Tidak ada file yang dibuat dalam prosesnya, tidak ada sumber yang diubah. Arsip tar yang dihasilkan disalurkan ke buruh pelabuhan, yang pada gilirannya mengirimkannya ke daemon buruh pelabuhan.

Pembaruan: Ini adalah jawaban yang valid di masa lalu ketika tidak ada -ftombol yang tersedia. Dengan buruh pelabuhan versi 1.5 opsi ini diperkenalkan. Sekarang Anda dapat membangun menyediakan Dockerfile yang berbeda seperti ini:

docker build -f other-Dockerfile .
itsafire
sumber
5

Anda dapat mencapai ini juga dengan menggunakan docker-compose.

Di docker-compose.yml Anda di bawah bagian build, Anda dapat menentukan direktori tempat Anda menyimpan dockerfile dan nama alternatifnya sebagai berikut:

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

buruh pelabuhan-menulis

batang
sumber
0

Mari kita asumsikan bahwa Anda telah berhasil menginstal kotak alat buruh pelabuhan termasuk docker-compose dan docker-machine . Ini adalah buruh pelabuhan-compose.yml saya

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

Dan ini di bawah Dockerfile

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

Pastikan file-file tersebut terletak tepat di bawah folder root. Ketika Anda menjalankan docker-compose maka Anda akan membangun image untuk web.

Faris Rayhan
sumber
0

Kasus saya ada di /tmpdirektori dan ada banyak file dan pekerja galangan coba dengan file lain meskipun saya lulus-f <Dockerfile.foo>

Solusi paling bersih dan mudah (untuk saya) adalah (lihat dockerfeedjawaban di atas):

cat DockerFile.debian.foo | docker build -t debian.foo -
tres. 14159
sumber
0

Pengguna Windows harus mencoba perintah di bawah ini:

docker build -f absolute_docker_file_path titik

sebagai contoh :

buruh pelabuhan membangun -f D: \ Code \ core-api \ API_TEST.Dockerfile.

Nikhil Vats
sumber