Si j'exécute cette cmd dans une console:
docker run -it --rm --link rabbit --link elasticsearch -v "$PWD"/logstash:/config-dir logstash logstash -f /config-dir/logstash.conf
Ça marche bien. Dans le dossier ./logstash se trouve un logstash.conf. Mais maintenant j'essaye de mettre dans un docker-compose et la même chose ne fonctionne pas:
logstash:
image: logstash:latest
links:
- "elasticsearch:elasticsearch"
- "rabbit:rabbit"
volumes:
- $PWD/logstash:/config_dir
command:
- "-f /config_dir/logstash.conf"
Mais je ne vois pas la différence entre les deux commandes. De l'aide? Comment se fait le montage en volume? Ou est la commande qui ne fonctionne pas? La réponse de logstash init est:
logstash_1 | {:timestamp=>"2016-07-06T15:43:06.663000+0000", :message=>"No config files found: / /config_dir/logstash.conf\nCan you make sure this path is a logstash config file?", :level=>:error}
rabbitmq_logstash_1 exited with code 1
Edit: J'ai finalement résolu le problème en supprimant la commande et en utilisant la commande par défaut de l'image d'origine, mais je ne comprends toujours pas le problème et comment la même commande est passée à docker et fonctionne mais si il est passé par docker-compose pas. Merci d'avance
Votre configuration ne fonctionne probablement pas car votre version de docker-compose n'exécute pas les extensions Shell lors de la création de votre conteneur. Cela signifie que docker compose essaie de trouver un chemin littéral $PWD/logstash
au lieu de développer $PWD
dans votre répertoire actuel. Les versions ultérieures de docker compose permettent l'expansion des variables d'environnement.
Docker-compose autorise les chemins relatifs cependant, grâce à l'utilisation de ./
, qui fait référence au dossier dans lequel se trouve le fichier de composition, pas nécessairement votre pwd
, il vous suffit donc de modifier votre fichier de composition pour qu'il soit:
volumes:
- ./logstash:/config_dir