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.
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
Pouvez-vous essayer ci-dessous commande -
docker run -it --rm -v %cd%:/wkDir $IMAGE_TAG yarn dev