La version Docker donne «Impossible de préparer le contexte: le contexte doit être un répertoire: / Users / tempUser / git / docker / Dockerfile»

92

J'ai un Dockerfilequi est censé construire une Ubuntuimage. Mais chaque fois que je cours

docker build -t ubuntu-test:latest ./Dockerfile

Il montre l'erreur suivante sur la console

impossible de préparer le contexte: le contexte doit être un répertoire: / Users / tempUser / git / docker / Dockerfile

Je suis sur Mac OsX. J'ai essayé sudoaussi. Rien ne marche.

Damien-Amen
la source

Réponses:

142

Vous devez pointer vers le répertoire à la place. Vous ne devez pas spécifier le fichier docker.

docker build -t ubuntu-test:latest .fait le travail .

docker build -t ubuntu-test:latest ./Dockerfilene fonctionne pas .

Damien-Amen
la source
pourquoi est-ce comme ça? il semble étrange d'avoir besoin de pointer vers un répertoire alors que vous pourriez facilement le faire pointer vers le fichier lui
Monica Heddneck
72

Vous pouvez également exécuter la construction de docker avec l' -foption

docker build -t ubuntu-test:latest -f Dockerfile.custom .

JakubKnejzlik
la source
1
Cela a fonctionné pour moi. Le nom Dockerfile dans mon cas était Dockerfile-abcd donc j'ai dû tirer:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale
17

Pour spécifier un Dockerfilewhen build, vous pouvez utiliser:

docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile

Mais cela échouera s'il y a ADDune COPYcommande qui dépend du chemin relatif. Il existe de nombreuses façons de spécifier un contextfor docker build, vous pouvez vous référer à la documentation de la construction de docker pour plus d'informations.

shizhz
la source
Fait ceci pour ubuntu 12.04 : docker build -t ubuntu:12.04 - < DockerfileVous devez être à la racine du Dockerfile
Dominic Motuka
15

Comprendre les contextes

le docker build commande

La syntaxe de base de la commande build de docker est

docker build -t imagename:imagetag context_dir

Le contexte

Le contexte est un répertoire et détermine ce que le processus de construction du docker va voir: Du point de vue du Dockerfile, tout fichier context_dir/mydir/myfilede votre système de fichiers deviendra/mydir/myfile dans le Dockerfile et donc pendant le processus de construction.

Le dockerfile

Si le dockerfile est appelé Dockerfile et vit dans le contexte, il sera trouvé implicitement par convention de dénomination. C'est bien, car cela signifie que vous pouvez généralement trouver immédiatement le Dockerfile dans n'importe quel conteneur Docker.

Si vous insistez pour utiliser un nom différent, dites "/ tmp / mydockerfile", vous pouvez utiliser -fcomme ceci:

docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir

mais alors le dockerfile ne sera pas dans le même dossier ou du moins sera plus difficile à trouver.

Lutz Prechelt
la source
2

C'est simple, chaque fois que la build de Docker est exécutée, docker veut savoir quel est le nom de l'image, nous devons donc passer -t:. Maintenant, assurez-vous que vous êtes dans le même répertoire où vous avez votre Dockerfile et exécutez

docker build -t <image_name>:<version> . Exemple en docker build -t my_apache:latest .supposant que vous êtes dans le même répertoire que votre Dockerfile, sinon passez le drapeau -f et le Dockerfile.

docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile

Prashanth
la source
Pour que cette deuxième commande s'exécute pour moi, j'ai dû la modifier légèrement: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(notez l'ajout d'un .à la fin)
Josh
2

Je suis confronté au même problème. J'utilise docker version:17.09.0-ce.

Je suis les étapes ci-dessous:

  1. Créer Dockerfile et ajouter des commandes pour créer une image Docker
  2. Accédez au répertoire où nous avons créé Dockfile
  3. exécuter la commande ci-dessous $ sudo docker build -t ubuntu-test:latest .

Il a résolu le problème et l'image créée avec succès.

Remarque: la commande de construction dépend de la version du docker ainsi que de l'option de construction que nous utilisons. :)

Rajeev Rathor
la source
1

L'une des raisons pour lesquelles j'obtiens une erreur était le nom du fichier.Assurez- vous que le nom du fichier est Dockerfile.Je l'ai donc compris, j'espère que cela pourrait aider quelqu'un.

Dheeraj Kumar
la source