एक विशिष्ट Dockerfile का निर्माण करने में सक्षम नहीं


95

मैं एक Dockerfile जैसी बिल्ड बनाने में सक्षम हूं

docker build -t deepak/ruby .

लेकिन एक डॉकरफाइल के लिए जिसका नाम नहीं है Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

हम कहते हैं कि इसे कहा जाता है Dockerfile.app जिसे हम बनाते हैं

docker build -t deepak/app Dockerfile.app

तब मुझे त्रुटि मिलती है

Uploading context 0 bytes
Error build: EOF
EOF

15
तो आपका सवाल यह है कि अगर डॉकरफाइल का नाम डॉकरफाइल नहीं है तो मैं डॉकटराइल कैसे बनाऊं?
केन कोचरन

1
@KenCochrane हाँ। यह सवाल है
गहरा

1
यदि आप चलाते docker build --helpहैं, तो एक पंक्ति है जहाँ आप पा सकते हैं कि आप क्या देख रहे हैं: -f, -file string Dockerfile का नाम (डिफ़ॉल्ट 'PATH / Dockerfile' है)
blasrodri

2
आप 2013 में डॉकर सीख रहे थे। यह दूरदर्शिता है।
18

जवाबों:


220

ध्यान दें कि .दोनों कमांड के अंत में एक बिंदु है ।

docker build -f MyDockerfile

या एक टैग के साथ:

docker बिल्ड -t mysuperimage -f MyDockerfile


2
docker build -f Dockerfile.consumerमुझे एक त्रुटि देता है "docker build" को ठीक 1 तर्क की आवश्यकता है। 'Docker build --help' देखें। उपयोग: docker बिल्ड [विकल्प] पथ | URL | -
कमल

15
@kamal क्या आपने .उपरोक्त आदेश के अंत में एक डॉट ( ) नोटिस किया था ?
सातेश पगोलू

7
बस कह - जोड़ने की आवश्यकता है। सिर्फ सादा चिड़चिड़ा है
myloginid

2
.एक आवश्यक बात नहीं है। बिल्ड कमांड दो args अर्थात लेता है। पथ के लिए Dockerfileऔर करने के लिए पथ contextनिर्देशिका। तो, हम कर सकते हैंdocker build -t mysupertag -f ./foo/Dockerfile ./foo
मोहनीश


23

Docker build का अंतिम पैरामीटर बिल्ड पथ है, जब आप .इसे डालते हैं तो इसका मतलब है कि यह वह मार्ग है जहाँ आप पाएंगे Dockerfile। जब आप इसे बदलेंगे Dockerfile.appतब यह कोशिश करेगा और खोजेगा Dockerfile.app/Dockerfile, जो सही नहीं है।

मुझे यकीन नहीं है कि यह अभी भी काम करेगा, लेकिन आप ऐसा करने में सक्षम थे।

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

कोशिश करें और देखें कि क्या यह मदद करता है, यदि नहीं, हो सकता है कि इस सुविधा को वापस जोड़ने के लिए एक डॉक जारी करें, या किसी अन्य नाम के साथ डॉकरफाइल का उपयोग करने के बारे में प्रलेखन अपडेट करें।

अधिक जानकारी यहाँ: http://docs.docker.io/en/latest/commandline/command/build/


1
मैं एक यूआरएल की कोशिश की है और यह काम करता है। डॉक्स के अनुसार भी पथ काम करना चाहिए। बग दर्ज करेंगे।
गहरा

5
आपके द्वारा साझा किए गए डॉक्स के अनुसार (धन्यवाद)। docker build - < Dockerfileमुझे एक स्थानीय फ़ाइल को जोड़ने की अनुमति नहीं देगा। लेकिन यह बाहर की कोशिश की है और यह काम करता है
गहरा

2
लेकिन मैं एक अलग Dockerfile देना चाहता हूं और अभी भी एक संदर्भ है। फाइलें जोड़ो। तो मैं एक बग दर्ज करूँगा
गहरा

यह सिर्फ इसमें एक सिंगल डॉकरीफाइल के साथ एक संदर्भ पैदा करेगा। सभी सहायक फाइलें इसे संदर्भ में नहीं बनाएंगी।
१३

13

प्रयास करें dockerfeed । यह स्टेक के माध्यम से एक संदर्भ बनाने के लिए docker सुविधा का उपयोग करता है। मैंने आपकी समस्या का समाधान करने के लिए स्क्रिप्ट लिखी थी जिसका मैं स्वयं सामना कर रहा था।

एक डॉकरफाइल को एक अलग से बदलने के लिए जिसे आप इस तरह से करते हैं:

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

और वॉयला। डॉकरफीड जैसा कर रहा है docker build। यह अपने डॉकफाइल के साथ स्रोत को पैक करता है लेकिन आपको पुराने डॉकफाइल को वांछित के साथ स्वैप कर देता है। प्रक्रिया में कोई फाइल नहीं बनाई जाती है, कोई स्रोत नहीं बदला जाता है। उत्पन्न टार आर्काइव को डॉकटर में पाइप किया गया है, जो बदले में इसे डॉकर डेमॉन में भेजता है।

अपडेट: पुराने दिनों में यह एक वैध जवाब था जब कोई -fस्विच उपलब्ध नहीं था । डॉक वर्जन 1.5 के साथ यह विकल्प पेश किया गया था। अब आप इस तरह एक अलग Dockerfile प्रदान कर सकते हैं:

docker build -f other-Dockerfile .

5

आप इसे डॉकटर-कंपोज़ का उपयोग करके भी प्राप्त कर सकते हैं।

बिल्ड अनुभाग के तहत अपने docker-compose.yml में, आप उस निर्देशिका को निर्दिष्ट कर सकते हैं जिसमें आप अपने dockerfile और उसके वैकल्पिक नाम को निम्नानुसार संग्रहीत करते हैं:

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

डोकर-लिखें


1

विंडोज उपयोगकर्ता को कमांड के नीचे प्रयास करना चाहिए:

docker build -f Abs_docker_file_path डॉट

उदाहरण के लिए :

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


0

मान लेते हैं कि आपने डॉक-कम्पोज़ और डूकर-मशीन सहित डॉक टूल बॉक्स को सफलतापूर्वक स्थापित किया है । यह मेरा डॉकटर-कंपोज है।लाइम है

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

और यह डॉकरफाइल के अधीन है

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

सुनिश्चित करें कि उन फ़ाइलों को रूट फ़ोल्डर के तहत ठीक स्थित है। जब आप डॉक-कंपोज़ करते हैं तो आप वेब के लिए छवि बनाने जा रहे हैं।


0

मेरा मामला /tmpनिर्देशिका में है और बहुत सारी फाइलें हैं और मैं दूसरों के साथ कोशिश कर रहा हूं कि मैं पास हूं-f <Dockerfile.foo>

सबसे साफ और आसान (मेरे लिए) समाधान है ( dockerfeedऊपर दिए गए जवाबों में से पढ़ें ):

cat DockerFile.debian.foo | docker build -t debian.foo -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.