La compilación de Docker da "no se puede preparar el contexto: el contexto debe ser un directorio: / Users / tempUser / git / docker / Dockerfile"

92

Tengo un Dockerfileque se supone que debe construir una Ubuntuimagen. Pero cuando alguna vez corro

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

Muestra el siguiente error en la consola

no se puede preparar el contexto: el contexto debe ser un directorio: / Users / tempUser / git / docker / Dockerfile

Estoy en Mac OsX. Yo también lo intenté sudo. Nada funciona.

Damien-Amen
fuente

Respuestas:

142

En su lugar, debe apuntar al directorio . No debe especificar el archivo docker.

docker build -t ubuntu-test:latest .hace el trabajo .

docker build -t ubuntu-test:latest ./Dockerfilehace que no funcione .

Damien-Amen
fuente
¿Por qué es como este? parece extraño tener que apuntar a un directorio cuando se puede hacer que apunte fácilmente al archivo en sí
Monica Heddneck
72

También puede ejecutar la compilación de Docker con la -fopción

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

JakubKnejzlik
fuente
1
Esto funcionó para mí. El nombre de Dockerfile en mi caso era Dockerfile-abcd, así que tuve que disparar:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale
17

Para especificar Dockerfilecuándo compilar, puede usar:

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

Pero va a fallar si hay ADDo COPYcomando que depende de ruta relativa. Hay muchas formas de especificar un contextpara docker build, puede consultar los documentos de la compilación de Docker para obtener más información.

shizhz
fuente
Hice esto para ubuntu 12.04 : docker build -t ubuntu:12.04 - < Dockerfiledebe estar en la raíz del Dockerfile
Dominic Motuka
15

Comprender contextos

El docker buildcomando

La sintaxis básica del comando de compilación de Docker es

docker build -t imagename:imagetag context_dir

El contexto

El contexto es un directorio y determina lo que verá el proceso de compilación de Docker: Desde el punto de vista de Dockerfile, cualquier archivo context_dir/mydir/myfilede su sistema de archivos se convertirá /mydir/myfileen Dockerfile y, por lo tanto, durante el proceso de compilación.

El dockerfile

Si se llama al dockerfile Dockerfiley vive en el contexto, se encontrará implícitamente mediante la convención de nombres. Eso es bueno, porque significa que generalmente puede encontrar el Dockerfile en cualquier contenedor de la ventana acoplable de inmediato.

Si insiste en usar un nombre diferente, diga "/ tmp / mydockerfile", puede usarlo -fasí:

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

pero entonces el dockerfile no estará en la misma carpeta o al menos será más difícil de encontrar.

Lutz Prechelt
fuente
2

Es simple, siempre que se ejecuta la compilación de Docker, Docker quiere saber cuál es el nombre de la imagen, por lo que debemos pasar -t:. Ahora asegúrese de estar en el mismo directorio donde tiene su Dockerfile y ejecute

docker build -t <image_name>:<version> . Ejemplo docker build -t my_apache:latest .asumiendo que está en el mismo directorio que su Dockerfile; de ​​lo contrario, pase el indicador -f y el Dockerfile.

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

Prashanth
fuente
Para que ese segundo comando se ejecute para mí, tuve que cambiarlo ligeramente: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(tenga en cuenta la adición de un .al final)
Josh
2

Me enfrento al mismo problema. Estoy usando docker version:17.09.0-ce.

Sigo los pasos a continuación:

  1. Cree Dockerfile y comandos agregados para crear una imagen de Docker
  2. Ir al directorio donde hemos creado Dockfile
  3. ejecutar debajo del comando $ sudo docker build -t ubuntu-test:latest .

Resolvió el problema y la imagen creada con éxito.

Nota: el comando de compilación depende de la versión de la ventana acoplable y de la opción de compilación que estemos usando. :)

Rajeev Rathor
fuente
1

Una de las razones por las que recibí un error fue el nombre del archivo, asegúrese de que el nombre del archivo sea Dockerfile. Así que lo descubrí, espero que pueda ayudar a alguien.

Dheeraj Kumar
fuente