J’ai tenté l’expérience pendant une demi-heure environ. Podman est compatible au niveau des commandes, mais pas au niveau des sorties, ce qui perturbe launcher lorsqu’il tente d’analyser la sortie. (Ce n’est pas difficile de les distinguer : docker --version répond par podman version 1.0.5, ce qui n’est pas un obstacle majeur.)
Il n’existe pas d’appareil réseau docker0. Le pilote de stockage overlay par défaut de Podman est essentiellement l’implémentation overlay2 et lui est aliasé, mais la sortie ne mentionne pas overlay2 et la commande docker info produit une sortie légèrement différente. J’ai utilisé --skip-prereqs pour contourner les vérifications. Les répertoires partagés n’ont pas été créés automatiquement ; je n’ai pas investigué la raison. J’ai exécuté mkdir -p /var/discourse/shared/standalone/log/var-log pour continuer. Ensuite, j’ai rencontré des problèmes de permissions dus au fait que SELinux était activé mais non configuré pour /var/discourse.
Si vous montez un répertoire en volume dans un conteneur et ajoutez :z ou :Z, les moteurs de conteneurs relient le contenu sous les volumes à container_file_t.
La documentation de build de Podman indique :
L’option z indique à Podman que deux conteneurs partagent le contenu du volume. En conséquence, Podman étiquette le contenu avec un label de contenu partagé. Les labels de volume partagés permettent à tous les conteneurs de lire et d’écrire dans le contenu. L’option Z indique à Podman d’étiqueter le contenu avec un label privé non partagé. Seul le conteneur actuel peut utiliser un volume privé.
J’ai décidé de lancer setenforce 0 pour l’instant sur cette installation jetable et de revenir dessus plus tard, peut-être. J’ai modifié les volumes pour utiliser le :z en minuscules comme ceci :
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared:z
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log:z
Avec ces petites modifications, j’ai réussi à amorcer Discourse. Redis n’est pas content que les pages énormes transparentes soient prises en charge dans le noyau et suggère de les désactiver, ainsi que de modifier les paramètres de sur-engagement de mémoire. Probablement beaucoup d’autres messages de débogage utiles m’ont échappé dans les mégaoctets de sortie des journaux !
./launcher start app
...
--restart option is not supported.
Use systemd unit files for restarting containers
J’ai modifié le script pour ne pas utiliser --restart et découvert le besoin de --skip-prereqs également en mode start, ce qui m’a finalement amené à essayer docker run, moment où :
./launcher start app --skip-prereqs
...
+ /usr/bin/docker run ... -e DOCKER_HOST_IP= --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared:z -v /var/discourse/shared/standalone/log/var-log:/var/log:z --mac-address 02:9c:01:9b:0e:17 local_discourse/app /sbin/boot
--mac-address option not currently supported
Donc, cela ne fonctionne certainement pas hors de la boîte, et je ne sais pas combien de travail il faudrait pour adapter launcher afin qu’il fonctionne avec Docker ou Podman. Gérer les prérequis serait « fonctionnel » et probablement pas trop difficile avec une vérification préalable de Podman, mais je ne sais pas à quel point les hypothèses sur la configuration réseau sont profondes dans la pile de configuration, et il semble que ce mode de réseau ne soit tout simplement pas pris en charge par Podman.
Compte tenu de cette préoccupation, je prévois de ne pas effectuer le travail nécessaire pour faire fonctionner launcher sous Podman. Je rapporte simplement les résultats d’une première expérience rapide.
Cela dit, ce n’est probablement pas un travail difficile pour quelqu’un qui connaît mieux la pile. J’ai effectué tout mon travail de développement ce printemps sur une installation manuelle de développement sur Fedora 29 avec des ajustements triviaux comme l’utilisation de dnf au lieu de apt-get et quelques traductions mineures de noms de paquets, sans utiliser Docker ni Podman du tout. Je pense que quelqu’un qui connaît bien Podman ainsi que l’administration normale de toute la pile technologique Discourse trouverait probablement cela être une quantité modérée de travail relativement facile. Si je savais exactement tout le travail impliqué, j’aurais une meilleure idée de savoir s’il s’agirait d’un type de travail susceptible de « pourrir » et nécessiter une maintenance continue ou non. Mais… je ne sais pas. 