web-dev-qa-db-fra.com

Le volume monté dans Docker ajoute: C à la fin du chemin de Windows lors de la traduction du chemin de style linux

J'ai trouvé une bizarrerie intéressante en essayant de monter une image de menu fixe sur des fenêtres.

J'ai créé un script .sh qui effectue un montage du dossier de projet pour exécuter notre image d'environnement de développeur. Je veux un script que chaque développeur puisse exécuter, quelle que soit sa machine. Tout ce qu'il fait est exécute docker avec le dossier de projet actuel.

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

Fonctionne bien. Le plan consiste maintenant à appeler ce script à partir de npm. J'aimerais donc que cela fonctionne par rapport au dossier actuel. Essayons 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. Qu'est-ce que ;C et d'où vient-il?

Donc je fais echo $PWD qui me donne /d/my/project/folder.

Intéressant, donc $PWD résout le chemin correct dans le format de chemin linux, et il semble que docker tente de traduire ce chemin en chemin Windows correct, sauf que ce ;C apparaît de nulle part. Et le \ sont /...

Qu'est-ce qui se passe exactement ici?

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

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

17
Martaver

Donc, avec quelques efforts supplémentaires, j'ai trouvé ces trois threads, liés à git-bash en train de démonter le montage de docker:

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

Lorsque je regarde la documentation de mingw sur le chemin utilisé par la conversion de chemin que git-bash utilise, je trouve cette table de syntaxe: http://www.mingw.org/wiki/Posix_path_conversion

L'une de ces sorties au format: x;x;C:\MinGW\msys\1.0\x. Notez le ;C dedans. Si git-bash essaie d'être intelligent, en rajoutant de la syntaxe et en affichant un chemin avec ce format, cela l'expliquerait.

La solution consiste à échapper à la conversion du chemin, en utilisant le préfixe avec /. Donc, la commande docker de travail pour exécuter docker à partir de git-bash avec le répertoire de travail actuel:

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

35
Martaver

Pouvez-vous essayer ci-dessous commande - 

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