Il y a une question précédente ( indicateur Docker inconnu --mount ) face à la même erreur qui était due à l'exécution d'une version obsolète de Docker. J'ai une version à jour de Docker en cours d'exécution.
J'ai le Dockerfile
suivant:
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: true
D'après la documentation , je devrais pouvoir exécuter simplement docker build --ssh default .
. Cependant, je reçois l'erreur suivante:
Sending build context to Docker daemon 2.048kB Error response from daemon: Dockerfile parse error line 3: Unknown flag: mount
Sortie de la docker version
:
FROM continuumio/miniconda3 RUN --mount=type=ssh pip install git+ssh://git@github.com/myrepo/myproject.git@develop RUN conda install numpy ...
Je voudrais créer une image Docker sans exposer mes informations d'identification SSH privées, et cela semblait être la méthode prise en charge. Quelqu'un a-t-il une idée de la cause du problème?
3 Réponses :
Le message d'erreur que vous obtenez en raison de l'écriture de --mount
dans le Dockerfile
. Vous devez d'abord activer Docker BuildKit pour utiliser cette syntaxe.
Vous pouvez vérifier toutes les options de construction actuellement disponibles ici
Dommage que pour le moment les commandes Bocker BuildKit ne soient pas disponibles via Docker Compose. github.com/docker/compose/issues/6440
@AlexisWilke Une bonne utilisation de Buildkit en général est possible avec Docker Compose. Exécutez-le simplement avec: COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build
. Il semble que les arguments spéciaux --mount
tels que les secrets de construction ( github.com/docker/compose/pull/7046 ) ou ssh ( github.com/docker/compose/issues/7252 ) n'en font pas encore partie.
Dockerfile
DOCKER_BUILDKIT=1 docker build --ssh default -t my_image .
Remarque: le commentaire sur la première ligne est obligatoire vaudou
Ensuite, construisez votre image docker avec:
# 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 ...
Avec cela, vous pourrez utiliser l' option --mount
pour la directive RUN
dans votre Dockerfile.
Comme indiqué dans la documentation ici , le transfert ssh lors de la création d'une image docker est activé uniquement lors de l'utilisation du backend BuildKit :
Fonctionnalités de mise en œuvre externe
Cette fonctionnalité n'est disponible que lors de l'utilisation du backend BuildKit .
La version Docker prend en charge des fonctionnalités expérimentales telles que les montages de cache, les secrets de construction et le transfert ssh qui sont activés à l'aide d'une implémentation externe du générateur avec une directive de syntaxe. Pour en savoir plus sur ces fonctionnalités, reportez - vous à la documentation du référentiel BuildKit .
Pour cela, vous avez besoin de Docker 18.09 (ou version ultérieure) et vous devez également exécuter la commande docker build
avec la variable d'environnement DOCKER_BUILDKIT=1
et démarrer votre fichier Docker avec le commentaire magique suivant : # syntax=docker/dockerfile:experimental
.
Merci pour la réponse. J'ai essayé ceci et j'ai obtenu une nouvelle erreur: failed to create LLB definition: Dockerfile parse error line 3: Unknown flag: mount
.
Il s'avère que j'ai dû mettre l'en-tête suivant dans mon Dockerfile: # syntax=docker/dockerfile:1.0.0-experimental
. Je reçois maintenant un échec lors de la vérification de la clé de l'hôte. Faire des progrès!
oh, j'ai manqué ça, je mettrai à jour ma réponse pour qu'elle soit plus claire pour les futurs lecteurs
2 heures, 2 heures et enfin j'ai besoin de mettre ce commentaire dans mon Dockerfile # syntax=docker/dockerfile:experimental
Cette réponse devrait avoir beaucoup plus d'appréciation.
Si vous utilisez sudo
pour les commandes docker, vous aurez peut-être besoin de:
sudo DOCKER_BUILDKIT=1 ...
Et utiliser la variable sudo after ne fonctionne pas haha juste des heures perdues avant de s'en rendre compte.
Juste un avertissement à tous ceux qui essaient de faire fonctionner cette fonctionnalité: au moment d'écrire ces lignes, si vous exécutez Docker à partir d'un Mac (ou Windows, je suppose), vous ne pouvez pas passer votre client SSH au conteneur Docker pendant le processus de construction, donc cette fonctionnalité ne fonctionnera pas pour vous.
La réponse de @ Thomasleveil est excellente, même si j'ai également dû mettre à niveau docker-compose de 1.24.0 à 1.26.2 avant de pouvoir faire fonctionner cela.