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
3 Réponses :
essayez de changer cela en:
- $PWD:/var/www/:cached
Je pense que vous avez besoin du chemin complet ici
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 .....
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.
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).
vous utilisez
/ home / john / valet / testapp
dans le fichier docker-compose distant. ou peut-être un problème d'autorisationconfiguration 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?