Aujourd'hui, je vais vous faire un retour sur une erreur d'inattention sur docker qui m'a coûté quelques dizaines de minutes de mon temps!

Ce conseil est à destination des débutants sur docker.

Introduction

Il existe pas mal de sorte d'images docker, nous prendrons l'image ruby pour l'exemple. Comme vous pouvez le constater, il y a différentes typologies d'images disponible : buster, slim, alpine, stretch, ...

Certaines de ses images sont basées sur des distributions particulières, beaucoup plus légère ( alpine ), d'autres viennent avec des OS & dépendences plus volumineux.

Pour packager et déployer mon application, j'avais fais le choix d'utiliser une image alpine. Celle-ci dispose du minimum en terme de dépendences & packages pré-installé, et donc idéale pour le déploiement.

Le problème

Lorsque vous créer votre dockerfile, vous avez la possibilité d'utiliser les directives ENTRYPOINT & CMD à la fin de votre fichier. Ces directives vous permettent d'exécuter des commandes et de faire appel aux scripts que vous aurez préalablement créés.

Si vous avez l'habitude d'utiliser le shell bash, vous écrirez en en-tête fichier la ligne suivante : # /bin/bash. Cela indique au terminal d'utiliser bash pour exécuter ce script.

#/bin/bashecho "test"

Il se peut alors que lorsque vous lanciez docker avec le dockerfile, mais qu'aucun script ne se lance, vous laissant sans message d'erreur. 😨

La solution

Comme dit avant, les images alpine sont très légère et n'embarquent pas de dépendences superflues. Il faut donc soit installer bash à l'aide de la directive RUN du dockerfile :

  RUN apk add --no-cache bash

Soit changer votre script pour le rendre compatible avec le shell sh :

#/bin/shecho "test"

J'espère avoir été clair sur la manière de résoudre ce problème. Je vous souhaites à tous un bon développement ! 🐳

Ressources supplémentaires