Cet article s’inscrit dans le contexte suivant :

Nous avons encapsulé un module de recherche appelé SphinxSE dans un conteneur Docker. Ce conteneur, qui est basé sur l’image Ubuntu Xenial, exécute à la création une suite de commande relativement commune du type apt-get update, apt-get install afin de préparer l’environnement à SphinxSE.

Si Docker fonctionne relativement correctement sur Linux, j’ai rencontré plusieurs soucis lors du déploiement du conteneur sous Windows.

Pour bien visualiser l’environnement du projet, nous avons une base de données où nous souhaitons pouvoir rechercher des données selon différents critères, et enfin faire apparaître le résultat de la recherche sur une plateforme web. Notre back-end doit pouvoir communiquer avec le conteneur Docker afin de requêter le module SphinxSE à l’intérieur.

Nous n’allons pas décrire dans cet article le fonctionnement de SphinxSE ni approfondir la configuration de ce dernier, car cela fait déjà l’objet d’un article consultable ici.

Script d’initialisation erreur (ligne 1, lettre 1)

Lors du lancement du conteneur, un script d’initialisation de SphinxSE faisait planter ce dernier qui se terminait sans raison apparente. Pourtant le script fonctionne et ne comporte pas d’erreur.

Il s’est avéré que cette erreur disparaissait si, à défaut d’utiliser la commande git clone via par exemple le shell Git Bash, je téléchargeais le dépôt Git de l’image directement via mon navigateur

Cela paraît incroyable, mais il m’a fallu 2 jours pour régler le problème, alors si ça peut vous servir …

SphinxSE est inaccessible à l’extérieur du conteneur

SphinxSE a besoin de s’appuyer sur les données d’une base déjà existante. Ainsi, SphinxSE prend en configuration l’adresse IP de cette base ainsi que des identifiants. Peut-être était-ce dû à une mauvaise utilisation de Docker, mais SphinxSE n’arrivait pas à utiliser la base de données qui était en local sur mon poste. J’ajoute que cette même configuration fonctionne sur Linux avec la même commande de lancement du conteneur.

Afin de résoudre le problème, il faut modifier l’adresse IP que SphinxSE prend en configuration. Pour cela, tapez :

ipconfig

Puis chercher la carte réseau virtuel de Docker comme sur l’image suivante :

Enfin, remplacez l’adresse IP renseignée dans le fichier de configuration de SphinxSE par celle indiquée sur votre carte réseau virtuelle montée par Docker.

Il faut être très vigilants concernant les droits de l’utilisateur dans la configuration de SphinxSE : il faut que celui-ci ait les droits d’accès à la base de données à partir du conteneur. Pour cela, suivez les commandes suivantes pour exemple :

CREATE USER 'root'@'10.0.75.1' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.75.1' WITH GRANT OPTION;

Toujours utiliser PowerShell

Il peut y avoir des différences de comportement entre la console Windows et PowerShell, alors afin de ne pas avoir de soucis, il est préférable d’utiliser PowerShell qui semble moins capricieux.

Exemple de commande docker à exécuter

docker run -v $PWD/config:/etc/sphinxsearch -v $PWD/data:/var/lib/sphinxsearch/data -v $PWD/log:/var/log/sphinxsearch -v $PWD/run:/var/run/sphinxsearch -d -p 9312:9312 -p 9306:9306 sphinx:latest

Cela dépend évidemment de vos besoins, mais je vais détailler ici ce que fait cette ligne de commande.

L’option -v permet d’augmenter de volume dans le conteneur Docker.

Nous créons donc plusieurs dossiers : le premier est celui contenant notre configuration de Sphinx tandis que le second permet d’externaliser hors du conteneur les fichiers d’indexation que Sphinx a créé à l’intérieur de /var/lib/sphinxsearch/data. Le troisième permet lui aussi d’externaliser hors du conteneur les fichiers de log de Sphinx. Le quatrième est quant à lui nécessaire au fonctionnement interne de Sphinx.

L’option -p permet de spécifier quel port l’on souhaite lier à celui exposé par docker. Ici, nous ouvrons physiquement le même port que celui qui est exposé dans le conteneur.

Ressources


0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Déployer une image Docker Linux sous Windows

par Bastien B. temps de lecture : 3 min
0