impossible de créer un Dockerfile spécifique


88

Je suis capable de créer un Dockerfile comme

docker build -t deepak/ruby .

Mais pour un Dockerfile qui n'est pas nommé Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

disons qu'il s'appelle avec Dockerfile.app qui nous construisons

docker build -t deepak/app Dockerfile.app

alors j'obtiens l'erreur

Uploading context 0 bytes
Error build: EOF
EOF

15
Votre question est donc la suivante: comment créer un fichier dockerfile si le nom du fichier dockerfile n'est pas Dockerfile?
Ken Cochrane

1
@KenCochrane oui. c'est la question
deepak

1
Si vous exécutez docker build --helpil y a une ligne où vous pouvez trouver ce que vous cherchez: -f, --file string Nom du Dockerfile (par défaut est 'PATH / Dockerfile')
blasrodri

2
Vous appreniez Docker en 2013. C'est de la prévoyance.
mcan

Réponses:


210

Notez qu'il y a un point .à la fin des deux commandes.

docker build -f MyDockerfile.

Ou avec un tag:

docker build -t mysuperimage -f MyDockerfile.


1
docker build -f Dockerfile.consumerme donne une erreur "docker build" nécessite exactement 1 argument. Voir 'docker build --help'. Utilisation: docker build [OPTIONS] PATH | URL | -
kamal

12
@kamal avez-vous remarqué un point ( .) à la fin de la commande ci-dessus?
Sateesh Pagolu

7
Juste en disant - nécessitant d'ajouter le. est tout simplement irritant
myloginid

2
Ce .n'est pas une chose obligatoire. La commande build prend deux arguments à savoir. chemin vers Dockerfile& chemin vers le contextrépertoire. Alors, on peut le fairedocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish le


22

Le dernier paramètre de la construction de docker est le chemin de construction, lorsque vous le placez, .cela signifie qu'il s'agit du chemin où vous trouverez le fichier Dockerfile. Lorsque vous le modifiez, il Dockerfile.appessaiera de rechercher Dockerfile.app/Dockerfile, ce qui n'est pas correct.

Je ne sais pas si cela fonctionnera toujours, mais vous étiez capable de le faire auparavant.

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

Essayez cela et voyez si cela aide, sinon, ouvrez peut-être un problème de docker pour ajouter cette fonctionnalité ou mettez à jour la documentation sur la façon d'utiliser un Dockerfile avec un nom différent.

Plus d'informations ici: http://docs.docker.io/en/latest/commandline/command/build/


1
j'ai essayé une URL et cela fonctionne. Le chemin doit également fonctionner selon les documents. va déposer un bogue.
deepak

5
selon les documents que vous avez partagés (merci). docker build - < Dockerfilene me permettra pas d'ajouter un fichier local. Mais j'ai essayé et cela fonctionne
deepak

2
mais je veux donner un autre Dockerfile et avoir toujours un contexte ie. Ajouter des fichiers. donc je vais déposer un bogue
deepak

Cela créera simplement un contexte avec un seul Dockerfile. Tous les fichiers de support ne seront pas intégrés au contexte.
itsafire

12

Essayez dockerfeed . Il utilise la fonction docker pour créer un contexte via stdin. J'ai écrit le script pour répondre exactement à votre problème auquel je faisais face.

Pour remplacer un Dockerfile par un autre, procédez comme suit:

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

Et voilà. Dockerfeed fait la même chose que docker build. Il emballe la source avec son Dockerfile mais vous permet d'échanger l'ancien Dockerfile avec celui souhaité. Aucun fichier n'est créé dans le processus, aucune source n'est modifiée. L'archive tar générée est dirigée vers le docker, qui à son tour l'envoie au démon docker.

Mise à jour: il s'agissait d'une réponse valide à l'époque où aucun -fcommutateur n'était disponible. Avec la version 1.5 de docker, cette option a été introduite. Vous pouvez maintenant créer un fichier Docker différent comme celui-ci:

docker build -f other-Dockerfile .

5

Vous pouvez également y parvenir en utilisant docker-compose.

Dans votre docker-compose.yml sous la section build, vous pouvez spécifier le répertoire dans lequel vous stockez votre dockerfile et son autre nom comme suit:

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

docker-composer


0

Supposons que vous avez correctement installé la boîte à outils docker, y compris docker-compose et docker-machine . C'est mon docker-compose.yml

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

Et c'est sous Dockerfile

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

Assurez-vous que ces fichiers se trouvent précisément sous le dossier racine. Lorsque vous exécutez docker-compose up, vous allez créer une image pour le Web.


0

Mon cas est dans le /tmprépertoire et il y a beaucoup de fichiers et docker essayez avec d'autres fichiers bien que je passe le-f <Dockerfile.foo>

La solution la plus propre et la plus simple (pour moi) est (lire les dockerfeedréponses ci-dessus):

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

0

L'utilisateur Windows doit essayer la commande ci-dessous:

docker build -f absolu_docker_file_path point

par exemple :

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.