non è in grado di creare un Dockerfile specifico


94

Sono in grado di creare un Dockerfile come

docker build -t deepak/ruby .

Ma per un Dockerfile che non è denominato Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

diciamo che si chiama con Dockerfile.app cui costruiamo

docker build -t deepak/app Dockerfile.app

quindi ottengo l'errore

Uploading context 0 bytes
Error build: EOF
EOF

15
Quindi la tua domanda è: come faccio a creare un dockerfile se il nome del dockerfile non è Dockerfile?
Ken Cochrane

1
@KenCochrane sì. questa è la domanda
deepak

1
Se corri docker build --helpc'è una riga dove puoi trovare quello che stai cercando: -f, --file string Nome del Dockerfile (il valore predefinito è 'PATH / Dockerfile')
blasrodri

2
Stavi imparando Docker nel 2013. Questa è lungimiranza.
mcan

Risposte:


220

Notare che c'è un punto .alla fine di entrambi i comandi.

docker build -f MyDockerfile.

O con un tag:

docker build -t mysuperimage -f MyDockerfile.


2
docker build -f Dockerfile.consumermi dà un errore "docker build" richiede esattamente 1 argomento. Vedi 'docker build --help'. Utilizzo: docker build [OPTIONS] PATH | URL | -
kamal

15
@kamal hai notato un punto ( .) alla fine del comando precedente?
Sateesh Pagolu

7
Sto solo dicendo: è necessario aggiungere il file. è semplicemente irritante
myloginid

2
Non .è una cosa richiesta. Il comando build richiede due argomenti vale a dire. percorso della Dockerfile& percorso della contextdirectory. Quindi, possiamo faredocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish


23

L'ultimo parametro per docker build è il percorso di compilazione, quando lo inserisci .significa che questo è il percorso in cui troverai il file Dockerfile. Quando lo cambi in Dockerfile.appesso, proverà a cercare Dockerfile.app/Dockerfile, il che non è corretto.

Non sono sicuro che funzionerà ancora, ma eri in grado di farlo.

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

Provalo e vedi se aiuta, in caso contrario, forse apri un problema di Docker per aggiungere nuovamente questa funzionalità o aggiorna la documentazione su come utilizzare un Dockerfile con un nome diverso.

Maggiori informazioni qui: http://docs.docker.io/en/latest/commandline/command/build/


1
ho provato un URL e funziona. Anche il percorso dovrebbe funzionare secondo i documenti. segnalerà un bug.
Deepak

5
secondo i documenti che hai condiviso (grazie). docker build - < Dockerfilenon mi permetterà di AGGIUNGERE un file locale. Ma l'ho provato e funziona
Deepak

2
ma voglio dare un Dockerfile diverso e avere ancora un contesto, ad es. Aggiungere i file. quindi presenterò un bug
deepak

Questo creerà solo un contesto con un singolo Dockerfile al suo interno. Tutti i file di supporto non verranno inseriti nel contesto.
itsafire

13

Prova dockerfeed . Usa la funzionalità docker per creare un contesto tramite stdin. Ho scritto la sceneggiatura per affrontare esattamente il tuo problema che stavo affrontando io stesso.

Per sostituire un Dockerfile con uno diverso lo fai in questo modo:

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

E voilà. Dockerfeed sta facendo la stessa cosa di docker build. Comprende la sorgente con il suo Dockerfile ma ti consente di sostituire il vecchio Dockerfile con quello desiderato. Nessun file viene creato nel processo, nessuna origine viene modificata. L'archivio tar generato viene reindirizzato in docker, che a sua volta lo invia al daemon docker.

Aggiornamento: questa era una risposta valida ai vecchi tempi, quando non c'erano -finterruttori disponibili. Con la versione 1.5 di docker questa opzione è stata introdotta. Ora puoi creare un Dockerfile diverso come questo:

docker build -f other-Dockerfile .

5

Puoi ottenere questo risultato anche usando docker-compose.

Nel tuo docker-compose.yml nella sezione build, puoi specificare la directory in cui memorizzi il tuo dockerfile e il suo nome alternativo come segue:

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

docker-compose


0

Supponiamo di aver installato correttamente docker toolbox, inclusi docker-compose e docker-machine . Questo è il mio docker-compose.yml

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

E questo è sotto Dockerfile

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

Assicurati che quei file si trovino esattamente nella cartella principale. Quando esegui docker-compose up, creerai un'immagine per il web.


0

Il mio caso è in /tmp directory e ci sono molti file e la finestra mobile prova con altri file anche se passo il file-f <Dockerfile.foo>

La soluzione più pulita e facile (per me) è (intead le dockerfeedrisposte precedenti):

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

0

L'utente Windows dovrebbe provare il comando seguente:

docker build -f absolute_docker_file_path punto

per esempio :

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.