• [^] # Re: Root

    Posté par (site web personnel, Mastodon) . En réponse au journal LinuxFr avec Docker. Évalué à 10.

    Pour le coup du root, j'avoue que je ne comprends pas bien comment faire pour le faire comme il faut.

    J'ai essayé au début de mettre l'instruction USER 1001 dans le Dockerfile pour linuxfr.org, mais ça m'a empêché de faire fonctionner l'upload d'avatars.

    Le problème, c'est que docker-compose fait monter le dossier public et upload, mais comme les fichiers ont mon UID (genre 20000 sur mon poste), et bien l'utilisateur du container est incapable de créer le dossier public/tmp/upload et ensuite de faire les dossiers dans upload.

    Ensuite, j'ai abandonné, car justement nginx a aussi besoin d'accéder à ces dossiers et que du coup, il fallait commencer à coordonner les UID entre l'hôte et tout ces containers.

    Finalement, j'ai laissé tomber, car ce n'est pas un déploiement pour de la production (avec Kubernetes et/ou OpenShift/okd), mais uniquement pour faire des tests sur sa machine.

    Ma conclusion sur ce sujet, c'est que je tombe exactement sur le même os que lorsque j'essaie de faire une clé USB partagée entre différents postes Linux avec des UID/GID différents. La seule solution viable, ça serait de travailler avec un système de fichier sans permissions, genre FAT32.

    Au vu de mes recherches sur le web, j'ai l'impression que tout le monde sait qu'il faudrait éviter d'utiliser root pour exécuter des Docker, mais que personne ne propose de solution pour permettre de partager les fichiers entre le host et le container.

    Si j'ai bien compris, même OpenShift essaie de forcer à ne pas utiliser l'utilisateur root, mais il fait utiliser le groupe 0 et du coup, j'ai l'impression que ça ne change rien.


    C'est une bonne idée pour les binaires, je ne connaissais pas le projet "distroless". Je n'ai pas cherché à faire plus, parce que j'utilise déjà une debian slim et le minimum de paquet nécessaire pour faire tourner les services.

    Peut être que dans l'exemple que tu as donné j'aurais pu enlevé le paquet golang, mais par contre, le ca-certificates est nécessaire pour que le service puisse se connecter aux sites exeternes en HTTPS.


    Merci beaucoup pour le retour, je vais faire des tests avec les pistes que tu m'as donné sur ces questions.