no se puede construir un Dockerfile específico

88

Puedo construir un Dockerfile como

docker build -t deepak/ruby .

Pero para un Dockerfile que no tiene nombre Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "[email protected]"

RUN ./bin/rails s

digamos que se llama Dockerfile.app lo que construimos con

docker build -t deepak/app Dockerfile.app

entonces me sale el error

Uploading context 0 bytes
Error build: EOF
EOF
deepak
fuente
15
Entonces, su pregunta es, ¿cómo construyo un dockerfile si el nombre del dockerfile no es Dockerfile?
Ken Cochrane
1
@KenCochrane sí. esa es la pregunta
deepak
1
Si ejecuta, docker build --helphay una línea donde puede encontrar lo que está buscando: -f, --file string Nombre del Dockerfile (el valor predeterminado es 'PATH / Dockerfile')
blasrodri
2
Estabas aprendiendo Docker en 2013. Esto es previsión.
mcan

Respuestas:

210

Observe que hay un punto .al final de ambos comandos.

docker build -f MyDockerfile.

O con una etiqueta:

docker build -t mysuperimage -f MyDockerfile.

Andrzej Rehmann
fuente
1
docker build -f Dockerfile.consumerme da un error "docker build" requiere exactamente 1 argumento. Consulte 'docker build --help'. Uso: compilación de docker [OPCIONES] RUTA | URL | -
Kamal
12
@kamal, ¿notó un punto ( .) al final del comando anterior?
Sateesh Pagolu
7
Solo digo - requiere agregar el. es simplemente irritante
myloginid
2
No .es una cosa necesaria. El comando de compilación toma dos argumentos a saber. ruta a Dockerfile& ruta al contextdirectorio. Entonces, podemos hacerlodocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish
22

El último parámetro para la compilación de la ventana acoplable es la ruta de compilación, cuando lo pones .significa que esta es la ruta donde encontrarás el archivo Dockerfile. Cuando lo cambie, Dockerfile.appintentará buscar Dockerfile.app/Dockerfile, lo cual no es correcto.

No estoy seguro de si seguirá funcionando, pero solías poder hacer esto.

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

Pruébelo y vea si ayuda, si no, tal vez abra un problema de Docker para volver a agregar esta función, o actualice la documentación sobre cómo usar un Dockerfile con un nombre diferente.

Más información aquí: http://docs.docker.io/en/latest/commandline/command/build/

Ken Cochrane
fuente
1
He probado una URL y funciona. La ruta también debería funcionar de acuerdo con los documentos. presentará un error.
deepak
5
de acuerdo con los documentos que compartiste (gracias). docker build - < Dockerfileno me permitirá AGREGAR un archivo local. Pero lo he probado y funciona
deepak
2
pero quiero dar un Dockerfile diferente y aún tener un contexto, es decir. Agregar archivos. así que presentaré un error
deepak
Esto solo creará un contexto con un solo Dockerfile en él. Todos los archivos de apoyo no se incluirán en el contexto.
Itsafire
12

Prueba dockerfeed . Utiliza la función docker para crear un contexto a través de stdin. Escribí el guión para abordar exactamente tu problema al que me enfrentaba.

Para reemplazar un Dockerfile con uno diferente, hazlo así:

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

Y voilá. Dockerfeed está haciendo lo mismo que docker build. Empaqueta la fuente con su Dockerfile pero le permite intercambiar el antiguo Dockerfile por el deseado. No se crean archivos en el proceso, no se cambia la fuente. El archivo tar generado se canaliza a la ventana acoplable, que a su vez lo envía al demonio de la ventana acoplable.

Actualización: esta era una respuesta válida en los viejos tiempos cuando no había ningún -finterruptor disponible. Con la versión 1.5 de Docker se introdujo esta opción. Ahora puede crear un Dockerfile diferente como este:

docker build -f other-Dockerfile .
es fuego
fuente
5

También puede lograr esto usando docker-compose.

En su docker-compose.yml en la sección de compilación, puede especificar el directorio en el que almacena su dockerfile y su nombre alternativo de la siguiente manera:

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

docker-compose

eje
fuente
0

Supongamos que ha instalado correctamente la caja de herramientas de la ventana acoplable, incluidas docker-compose y docker-machine . Este es mi docker-compose.yml

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

Y esto está bajo Dockerfile

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

Asegúrese de que esos archivos se encuentren exactamente en la carpeta raíz. Cuando ejecute docker-compose up, creará una imagen para web.

Faris Rayhan
fuente
0

Mi caso está en el /tmpdirectorio y hay muchos archivos y la ventana acoplable intenta con otros archivos, aunque paso el-f <Dockerfile.foo>

La solución más limpia y fácil (para mí) es (intead las dockerfeedrespuestas anteriores):

cat DockerFile.debian.foo | docker build -t debian.foo -
tres.14159
fuente
0

El usuario de Windows debe probar el siguiente comando:

docker build -f ruta_de_archivo_de_docker_absoluta punto

por ejemplo :

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

Cubas Nikhil
fuente