web-dev-qa-db-fra.com

Liaison de volume à l'aide de Docker Composer sous Windows

J'ai récemment mis à niveau ma Docker Toolbox sur Windows 10, et maintenant mes montages de volume ne fonctionnent plus. J'ai tout essayé. Voici le chemin de montage actuel:

volumes:
  - C:\Users\Joey\Desktop\backend:/var/www/html

Je reçois une erreur de montage de liaison non valide.

12
9997

Il semble que vous utilisiez un chemin absolu situé à l'intérieur de C:\Users dir, cela n'a pas fonctionné pour moi aussi, si vous utilisez Docker-Toolbox voir ci-dessous.

Aperçu

Transférer le ./ le chemin relatif dans la section volumes sera automatiquement résolu par docker-compose vers le répertoire contenant docker-compose.yml fichier (par exemple, si votre projet est dans %UserProfile%/my-project puis ./:/var/www/html obtient /c/Users/my-name/my-project:/var/www/html).

Le problème est qu'actuellement (en utilisant DockerToolbox-19.03.1) seulement le /c/Users le répertoire est partagé avec la machine virtuelle (la boîte à outils place docker elle-même dans la machine virtuelle, ce qui signifie qu'elle n'a pas accès à votre système de fichiers, sauf les répertoires partagés montés).

Conclusion

Donc, en gros, placez votre projet là-bas (C:\Users\YOUR_USER_NAME) devrait faire ./ travail. Mais même cela n'a pas fonctionné pour moi, et nous nous sommes retrouvés avec ci-dessous _prepare.sh script:

#!/bin/bash

VBoxManage='/c/Program Files/Oracle/VirtualBox/VBoxManage'

# Defines variables for later use.
ROOT=$(dirname $0)
ROOT=$(cd "$ROOT"; pwd)
MACHINE=default
PROJECT_KEY=shared-${ROOT##*/}

# Prepares machine (without calling "docker-machine stop" command).
#
if [ $(docker-machine status $MACHINE 2> /dev/null) = 'Running' ]; then
    echo Unmounting volume: $ROOT
    docker-compose down
    docker-machine ssh $MACHINE <<< '
        Sudo umount "'$ROOT'";
    '
    "$VBoxManage" sharedfolder remove $MACHINE --name "$PROJECT_KEY" -transient > /dev/null 2>&1
else
    docker-machine start $MACHINE
fi
eval $(docker-machine env $MACHINE)

set -euxo pipefail
"$VBoxManage" sharedfolder add $MACHINE --name "$PROJECT_KEY" --hostpath "$ROOT" -automount -transient


docker-machine ssh $MACHINE <<< '
    echo Mounting volume: '$ROOT';
    Sudo mkdir -p "'$ROOT'";
    Sudo mount -t vboxsf -o uid=1000,gid=50 "'$PROJECT_KEY'" "'$ROOT'";
'

docker-compose up -d
docker-machine ssh $MACHINE
bash

tilisation:

  • Placez-en une copie à côté de chaque projet docker-compose.yml fichier.
  • Exécutez-le chaque fois que le système est allumé (double-cliquez simplement dessus ou sur son raccourci).
  • Terminé! les chemins relatifs devraient maintenant fonctionner même si votre projet se trouve sur un autre lecteur (éloigné et en dehors de C:\Users dir).

Remarque:

  • Avec une petite modification, cela devrait fonctionner sans docker-compose étant requis.
  • Pensez à exécuter docker system Prune pour libérer de l'espace disque (ou simplement ajouter docker system Prune --force au script ci-dessus, sur une nouvelle ligne juste après la commande mount).
1
Top-Master

J'ai rencontré le même problème (j'utilise Docker Desktop).

Mes pas étaient:

1) Placez votre dossier sous le lecteur "C"

2) Ouvrez "Paramètres" dans Docker Desktop -> "Lecteurs partagés" -> "Réinitialiser les informations d'identification" -> sélectionnez le lecteur "C" -> "Appliquer"

3) Ouvrez le terminal et exécutez (comme proposé par Docker Desktop):
docker run --rm -v c:/Users:/data Alpine ls /data

4) Ouvrez votre docker-compose.yml et chemin de mise à jour dans -volumes:

volumes:
  - /data/YOUR_USERNAME/projects/my_project/jssecacerts:/usr/lib/jvm/Java-1.8-openjdk/jre/lib/security/jssecacerts/

5) Redémarrez le conteneur Docker

1
Leonid Dashko

Est-ce la section des services? Vous en avez maintenant besoin dans la section volume, donc si vous l'aviez, supprimez-le.

0
zhrist