1
votes

Le déploiement de la pile Docker avec compose-file entraîne une configuration de montage non valide pour le type "bind": le chemin de la source de liaison n'existe pas:

J'essaye de déployer mes conteneurs et j'obtiens cette erreur (de docker stack ps testapp --no-trunc ): configuration de montage invalide pour le type "bind": le chemin de la source de liaison fait n'existe pas: / home / john / valet / testapp . J'utilise docker-compose . Je comprends qu'avant le déploiement, il transforme mes mappages de volumes relatifs en mappages absolus et sur l'hôte distant, / home / john / valet / testapp n'existe pas.

  volumes:
        - ./:/var/www/:cached

mais je ne sais pas vraiment comment résoudre ce problème.

PS Localement, tout fonctionne très bien avec docker-compose build && docker-compose up -d et sur docker hub, mes builds automatiques se construisent également avec succès.

Modifié : Juste au cas où ajouter le dépôt du code source: https://github.com/neorganic/dockertest


4 commentaires

vous utilisez / home / john / valet / testapp dans le fichier docker-compose distant. ou peut-être un problème d'autorisation configuration de montage non valide pour le type "bind": le chemin de la source de montage de bind n'existe pas: signifie que le système de fichiers n'a pas été partagé avec succès dans le conteneur du docker.


@Adiii Ok, mais comment ne pas utiliser ce chemin? car je ne suis nulle part en train de définir le chemin / home / john / valet / testapp . Je suis en train de définir un chemin dynamique $ PWD: / var / www /: mis en cache


essayez d'exécuter avec la commande docker run pour déboguer le problème, docker est autorisé à accéder à l'emplacement $ PWD?


@Adiii Testera, mais juste FYI a ajouté un lien de code source - peut être utile?


3 Réponses :


0
votes

essayez de changer cela en:

- $PWD:/var/www/:cached

Je pense que vous avez besoin du chemin complet ici


3 commentaires

Juste essayé - même problème. Il mappait en fait le chemin complet pendant le déploiement de toute façon, le problème est que le chemin que j'ai localement / home / john / valet / testapp / . n'existe pas sur l'hôte distant.


$ PWD sera chnaged en fonction du répertoire local qui ne sera pas / home / john / valet / testapp / ailleurs, l'image n'a rien à voir avec cela puisque les volumes est une directive d'exécution. dans votre docker-compose


pourquoi vous montez tout le $ PWD dans le dossier mis en cache , il inclut tous les dossiers inclus dans ce qui se trouve dans /php-fpm/php7.2.ini et autres lieux .....



1
votes

Tout ce que vous avez à faire est de spécifier le chemin correct pour votre volume. Vous pouvez créer un fichier séparé et l'appeler docker-compose-production.yml.

volumes:
  - /srv/data/www/:/var/www/

De plus, gardez à l'esprit que pour les systèmes de production, vous souhaitez utiliser mode swarm ( docker swarm init ) et appliquez les changements stach avec docker swarm deploy .

Le : cached L'option code> ne s'applique qu'aux systèmes OSX et vous utilisez très probablement un système d'exploitation Linux en production.


0 commentaires

1
votes

Le problème était donc le fait que je ne comprenais pas que le volume doit exister sur l'hôte sur lequel je déploie les conteneurs. Pour une raison quelconque, je pensais qu'il était copié / synchronisé à partir de mon appareil local.

Je suis également arrivé à la conclusion que la complexité d'obtenir votre code source pour héberger dans docker-swarm est quelque chose que je préférerais ne pas avoir lorsque kubernetes aurait résolu ce problème, donc je passe à kubernetes (et gc d'ailleurs).


0 commentaires