Je tente de comprendre les commandes Docker émises par le lanceur.
Cela nécessite également de comprendre les autres commandes bash présentes dans le script. Comme je ne suis pas un expert en bash, je dois faire quelques recherches pour élucider certaines parties. Normalement, je lis le code, déduis manuellement la commande concernée, puis l’exécute pour vérifier, par exemple :
docker info 2> /dev/null
Parfois, certaines lignes sont plus complexes et j’exécute une commande équivalente, par exemple :
test=$(($(stat -f --format="%a*%S" /var/lib/docker)/1024**3 < 5)); echo $test
La sous-routine sur laquelle je travaille actuellement est host_run(), et je ne sais pas d’où provient l’entrée de cette routine.
https://github.com/discourse/discourse_docker/blob/master/launcher#L259-#L287.
Je pourrais poser de nombreuses questions au cours des prochains jours ou ajouter des instructions echo dans une version modifiée de launcher, mais il doit exister une meilleure solution.
Existe-t-il un moyen, comme la commande script, permettant de capturer les commandes Docker internes exécutées et de les journaliser dans un fichier ?
MODIFICATION
Cela semble fonctionner. Voir : Déboguer les scripts Bash
Il suffit d’utiliser l’option -x de bash, par exemple :
groot@galaxy:/var/discourse$ sudo bash -x launcher start app
Pour capturer cela dans un fichier :
- Créez un répertoire pour contenir les traces. Celui-ci est créé sous le chemin
~pour éviter les problèmes de permissions.
groot@galaxy:/var/discourse$ mkdir ~/traces
- Exécutez la commande bash qui vous intéresse. L’astuce est que la sortie de la trace ne va pas vers stdout, mais vers stderr, donc utilisez
2>au lieu de>, qui équivaut à1>.
groot@galaxy:/var/discourse$ sudo bash -x launcher start app 2> ~/traces/start_01
- Filtrez le fichier pour afficher les lignes contenant la commande docker.
groot@galaxy:/var/discourse$ grep /usr/bin/docker ~/traces/start_01
Exemple de sortie :
+ docker_path=/usr/bin/docker
+ '[' -z /usr/bin/docker ']'
++ /usr/bin/docker info
+ /usr/bin/docker info
++ /usr/bin/docker --version
++ /usr/bin/docker images
++ /usr/bin/docker run -i --rm -a stdout -a stderr discourse/base:2.0.20200512-1735 echo working
++ /usr/bin/docker info --format '{{.DockerRootDir}}'
+ '[' -z /usr/bin/docker ']'
++ /usr/bin/docker --version
++ /usr/bin/docker ps
++ /usr/bin/docker ps -a
+ /usr/bin/docker start app
Cela peut sembler contenir beaucoup plus de commandes Docker que prévu, mais launcher effectue de nombreuses vérifications d’intégrité que vous devriez faire manuellement. Cela me convainc d’utiliser launcher pour les tâches régulières pour lesquelles il a été conçu.