Hay una pregunta anterior ( Docker Unknown flag --mount ) que enfrenta el mismo error que se debió a que se estaba ejecutando una versión desactualizada de Docker. Tengo una versión actualizada de Docker en ejecución.
Tengo el siguiente Dockerfile :
FROM continuumio/miniconda3 RUN --mount=type=ssh pip install git+ssh://git@github.com/myrepo/myproject.git@develop RUN conda install numpy ... De acuerdo con la documentación , debería poder simplemente ejecutar docker build --ssh default . . Sin embargo, recibo el siguiente error:
Sending build context to Docker daemon 2.048kB Error response from daemon: Dockerfile parse error line 3: Unknown flag: mount Salida de docker version :
Client: Docker Engine - Community Version: 18.09.2 API version: 1.39 Go version: go1.10.8 Git commit: 6247962 Built: Sun Feb 10 04:12:39 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.2 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 6247962 Built: Sun Feb 10 04:13:06 2019 OS/Arch: linux/amd64 Experimental: trueMe gustaría crear una imagen de Docker sin exponer mis credenciales SSH privadas, y este parecía ser el método compatible. ¿Alguien tiene ideas sobre lo que está causando el problema?
Dockerfile
# syntax=docker/dockerfile:experimental FROM continuumio/miniconda3 RUN --mount=type=ssh pip install git+ssh://git@github.com/myrepo/myproject.git@develop RUN conda install numpy ...Nota: el comentario en la primera línea es obligatorio vudú
Luego construye tu imagen acoplable con:
DOCKER_BUILDKIT=1 docker build --ssh default -t my_image . Con esto, podrá usar la opción --mount para la directiva RUN en su Dockerfile.
Como se encuentra en la documentación aquí , el reenvío ssh cuando se crea una imagen acoplable solo se habilita cuando se usa el backend BuildKit :
Características de implementación externa
Esta característica solo está disponible cuando se usa el backend de BuildKit .
La compilación de Docker admite funciones experimentales como montajes en caché, secretos de compilación y reenvío ssh que se habilitan mediante el uso de una implementación externa del compilador con una directiva de sintaxis. Para obtener más información sobre estas características, consulte la documentación en el repositorio de BuildKit .
Para esto, necesita Docker 18.09 (o posterior) y también debe ejecutar el comando de docker build con la variable de entorno DOCKER_BUILDKIT=1 e iniciar su archivo Docker con el siguiente comentario mágico : # syntax=docker/dockerfile:experimental .
También puede editar /etc/docker/daemon.json y agregar:
{ "experimental" : false, "debug" : true, "features": { "buildkit" : true } }Si está utilizando sudo para los comandos de la ventana acoplable, es posible que necesite:
sudo DOCKER_BUILDKIT=1 ...
Para cualquier persona que pueda estar luchando con este tipo de error: asegúrese de que la primera línea del archivo sea '# syntax=docker/dockerfile:experimental'. Esto funcionará:
# syntax=docker/dockerfile:experimental FROM golang:1.14.1 as builder ... RUN --mount=type=ssh GOSUMDB=off go get -d -v ./...PERO si agrega un comentario al comienzo del archivo así:
# SOME SILLY COMMENT HERE <--- this ostensibly innocent comment ruins everything! # syntax=docker/dockerfile:experimental FROM golang:1.14.1 as builder ... RUN --mount=type=ssh GOSUMDB=off go get -d -v ./...Entonces 'syntax=...' no se tendrá en cuenta porque ya no está en la primera línea. ¡Es por eso que obtienes ese extraño error sobre 'montar' a continuación! ¡Gah!
Con suerte, esto salvará algunas horas de la vida de algunas personas.