Je voulais des minutes CI illimitées sur mes projets perso. Solution : self-hosted runners sur mon serveur.
J’ai commencé par les faire tourner en Docker container (image myoung34/github-runner, propre, isolé). Tout marchait… jusqu’au workflow avec services: postgres.
Erreur :
exec: "/__e/node20/bin/node": no such file or directory
Ce que GitHub Actions fait : quand tu as services:, il encapsule le job dans son propre container et y mount le binaire node du runner via /__e/. Si le runner tourne lui-même dans un container, ce mount ne fonctionne pas — le docker daemon de l’hôte ne voit pas les fichiers internes au container du runner.
La solution officielle de GitHub : faire tourner le runner directement sur l’hôte (binaire + systemd service). Pas en container.
Migration faite : 3 services systemd, user dédié actions-runner (UID 1002, dans le groupe docker, sans sudo). Workflow avec services postgres : ✅ passe.
Leçon : tout ne se conteneurise pas. Et la doc officielle existe pour de bonnes raisons.