125 votes

Le volume monté sur Docker ajoute; C à la fin du chemin Windows lors de la traduction à partir du chemin de style Linux

J'ai trouvé intéressant de bizarreries lors de la tentative de montage d'un panneau de l'image sur windows.

J'ai créé un .sh script qui fait monter le dossier de projet pour exécuter notre développeur de l'image de l'environnement. Je veux un script que tous les dev peuvent exécuter, indépendamment de leur machine. Il n'est de pistes de docker avec le dossier du projet en cours.

#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev

Fonctionne bien. Maintenant, le plan est d'appeler ce script à partir de npm, donc j'aimerais que cela fonctionne par rapport à ce dossier. Essayez une autre version.

docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev

Échoue avec:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from 
daemon: Mount denied:
The source path "D:/my/project/folder;C"
doesn't exist and is not known to Docker.

Wat. Ce qu' ;C et d'où vient-elle?

Donc, je n' echo $PWD ce qui me donne de l' /d/my/project/folder.

Intéressant, $PWD résout le chemin correct dans linux format de chemin d'accès, et il semble que docker est en train d'essayer de traduire que vers le bon chemin d'accès windows, sauf il y a cette ;C qui apparaît de nulle part. Et l' \ sont /...

Ce qui se passe exactement ici?

J'obtiens le même résultat en VSCode du terminal git bash et powershell.

Mise à jour: j'ai remarqué que l'exécution de l' .sh dans VSCode de powershell terminal, ouvre une nouvelle cmd.exe fenêtre de la console qui semble exécuter le script dans git bash. Donc cela pourrait être un git bash question.

175voto

Martaver Points 835

Ainsi, avec un peu supplémentaire à creuser, j'ai trouvé ces trois fils, liées à git-bash nettoyage en place le panneau de montage:

https://forums.docker.com/t/weird-error-under-git-bash-msys-solved/9210 https://github.com/moby/moby/issues/24029#issuecomment-250412919

Quand je le regarde de mingw documentation sur le chemin de la conversion git-bash utilise, je trouve ce tableau de la syntaxe: http://www.mingw.org/wiki/Posix_path_conversion

L'une des sorties dans le format: x;x;C:\MinGW\msys\1.0\x. Remarque l' ;C en elle. Si git-bash est d'essayer d'être intelligent, la farce de la syntaxe et de la sortie d'un chemin avec ce format, ce serait l'expliquer.

La Solution est d'échapper à la voie de la conversion, de l'aide en préfixant avec /. Ainsi, le travail le panneau de commande pour exécuter le panneau de git-bash avec le présent répertoire de travail:

docker run -it --rm -v /${PWD}:/wkDir $IMAGE_TAG yarn dev

3voto

olisteadman Points 99

Pour moi, la solution était simplement d'inclure une barre oblique de fermeture / à la fin de tous les chemins .

Par exemple au lieu de

/opt/apache-atlas-2.0.0/bin/atlas_start.py

...utilisation

/opt/apache-atlas-2.0.0/bin/atlas_start.py/

2voto

Shay Points 1

J'ai eu le même problème sur git bash et pas sur l'invite de commande. Vous pouvez à la place

 docker run -it --rm -v "/${PWD}/D:\my\project\folder":/wkDir $IMAGE_TAG yarn dev
 

0voto

Sujay Pillai Points 302

Pouvez-vous essayer la commande ci-dessous -

 docker run -it --rm -v %cd%:/wkDir $IMAGE_TAG yarn dev
 

0voto

Obothlale Points 71

J'ai en fait eu le même problème. Selon que vous utilisez Git Bash, cette commande fonctionne (en utilisant nginx comme exemple):

docker container run --name nom-conteneur -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx

bien sûr, vous pouvez spécifier le port et le répertoire que vous souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X