belirli bir Dockerfile oluşturulamıyor


94

Gibi bir Dockerfile oluşturabiliyorum

docker build -t deepak/ruby .

Ancak adlandırılmamış bir Dockerfile için Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

diyelim ki Dockerfile.app inşa ettiğimiz denir

docker build -t deepak/app Dockerfile.app

sonra hatayı alıyorum

Uploading context 0 bytes
Error build: EOF
EOF

15
Yani sorunuz şu, dockerfile'ın adı Dockerfile değilse nasıl bir dockerfile oluşturabilirim?
Ken Cochrane

1
@KenCochrane evet. soru bu
deepak

1
Çalıştırırsanız docker build --help, aradığınızı bulabileceğiniz bir satır vardır: -f, --file string Dockerfile'ın adı (Varsayılan 'PATH / Dockerfile')
blasrodri

2
2013'te Docker öğreniyordunuz. Bu bir öngörüdür.
mcan

Yanıtlar:


220

.Her iki komutun sonunda bir nokta olduğuna dikkat edin .

docker build -f MyDockerfile.

Veya bir etiketle:

docker build -t mysuperimage -f MyDockerfile.


2
docker build -f Dockerfile.consumerbana bir hata veriyor "docker build" tam olarak 1 argüman gerektirir. Bkz. 'Docker build --help'. Kullanım: docker build [SEÇENEKLER] YOL | URL | -
kamal

14
@kamal .yukarıdaki komutun sonunda bir nokta ( ) gördünüz mü ?
Sateesh Pagolu

7
Sadece söylüyorum -. sadece rahatsız edici
myloginid

2
Bu .gerekli bir şey değil. Build komutu iki argüman alır. dizin yolu Dockerfile& yolu context. Yani yapabilirizdocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish


23

Docker derlemesinin son parametresi, derleme yoludur, bunu koyduğunuzda .bunun Dockerfile,. Onu değiştirdiğinizde, Dockerfile.appdeneyecek ve arayacaktır Dockerfile.app/Dockerfile, ki bu doğru değil.

Hala işe yarayıp yaramayacağından emin değilim, ama bunu yapabiliyordun.

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

Bunu deneyin ve yardımcı olup olmadığına bakın, değilse, bu özelliği tekrar eklemek için bir docker sorunu açın veya farklı bir adla Dockerfile'ın nasıl kullanılacağına ilişkin belgeleri güncelleyin.

Daha fazla bilgi burada: http://docs.docker.io/en/latest/commandline/command/build/


1
bir url denedim ve çalışıyor. Yol ayrıca belgelere göre çalışmalıdır. bir hata bildirecek.
deepak

5
paylaştığınız belgelere göre (teşekkürler). docker build - < Dockerfileyerel bir dosya eklememe izin vermiyor. Ama denedim ve işe yarıyor
deepak

2
ancak farklı bir Dockerfile vermek istiyorum ve yine de bir bağlam var yani. Dosya Ekle. bu yüzden bir hata bildireceğim
deepak

Bu, içinde tek bir Dockerfile bulunan bir bağlam oluşturacaktır. Tüm destekleyici dosyalar bunu bağlama oturtmayacaktır.
itsafire

13

Dockerfeed'i deneyin . Stdin aracılığıyla bir bağlam oluşturmak için docker özelliğini kullanır. Senaryoyu tam olarak kendi kendimle karşı karşıya olduğum sorunu çözmek için yazdım.

Bir Dockerfile'ı farklı bir dosyayla değiştirmek için bunu şu şekilde yaparsınız:

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

Ve voilà. Dockerfeed ile aynı şeyi yapıyor docker build. Kaynağı Dockerfile ile paketler, ancak eski Dockerfile'ı istenen dosya ile değiştirmenize izin verir. İşlemde hiçbir dosya oluşturulmaz, kaynak değiştirilmez. Oluşturulan tar arşivi docker'a aktarılır ve bu da onu docker daemon'a gönderir.

Güncelleme: Bu, -fgeçişin mevcut olmadığı eski günlerde geçerli bir cevaptı . Docker sürüm 1.5 ile bu seçenek tanıtıldı. Şimdi bunun gibi farklı bir Dockerfile oluşturabilirsiniz:

docker build -f other-Dockerfile .

5

Docker-compose kullanarak da bunu başarabilirsiniz.

Yapım bölümünün altındaki docker-compose.yml dosyanızda, dockerfile'ınızı depoladığınız dizini ve alternatif adını aşağıdaki gibi belirtebilirsiniz:

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

docker-compose


0

Docker-compose ve docker-machine dahil olmak üzere docker toolbox'ı başarıyla kurduğunuzu varsayalım . Bu benim docker-compose.yml

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

Ve bu Dockerfile altında

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

Bu dosyaların tam olarak kök klasör altında bulunduğundan emin olun. Docker-compose up'ı çalıştırdığınızda, web için imaj oluşturacaksınız.


0

Benim durumum /tmpdizinde ve çok fazla dosya var ve docker diğer dosyalarla deniyor, ancak-f <Dockerfile.foo>

En temiz ve kolay (benim için) çözüm şudur: ( dockerfeedyukarıdaki cevaplardan biri):

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

0

Windows Kullanıcısı aşağıdaki komutu denemelidir:

docker build -f absolute_docker_file_path dot

Örneğin :

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.