Dans le cas d’un conteneur faisant office de server Web ou de BDD, il sera sans doute nécessaire d’accrocher un stockage persistant ou un accès à d’autres réseaux.
Stockage persistant de conteneur
Par défaut, toutes les nouvelles données écrite dans le conteneur sont perdues après sa suppression.
Pour conserver les données, l’option --volume (-v)
permets d’utiliser le système de fichier de l’host (et prévoir les bonne autorisations).
Mappage UID/GID
La commande podman unshare cat
permet d’afficher le mappage UID/GID :
$ podman unshare cat /proc/self/uid_map |
$ podman unshare cat /proc/self/gid_map |
La commande podman exec
affiche l’UID et le GID de l’user mysql à l’intérieur du conteneur qui s’exécute avec le stockage non persistant :
$ podman exec -it db_01 grep mysql /etc/passwd |
Stockage persistant
Création d’un répertoire sur l’host :
$ mkdir /home/projet/db_data |
Mappage des UID/GID :
$ podman unshare chown 27:27 /home/projet/db_data |
Afficher la mise en correspondance (27:27 -> 100026:100026) :
$ ls -l /home/projet/ |
Monter le répertoire avec l’option -d
de podman run -d
:
$ podman run -d --name db_01 \ |
Maintenant il faut définir le contexte SELinux.
Contextes SELinux pour le stockage de conteneurs
La commande podman container logs
affiche aussi les erreurs d’autorisation, ici pour /var/lib/mysql/db_data
:
$ podman container logs db_01 |
Cette erreur se produit à cause du contexte SELinux défini sur /home/projet/db_data
sur l’host.
Il faut définir le contexte SELinux container_file_t
avant de monter le répertoire en tant que stockage persistant.
La commande podman run -v /home/projet/db_data:/var/lib/ mysql:Z
défini le contexte SELinux de /home/projet/db_data
quand il sera monté comme stockage persistant pour /var/lib/mysql
:
$ podman run -d --name db_01 \ |
Vérifier le contexte sur /home/projet/
:
$ ls -Z /home/projet/ |
/!\ Résumé des commandes
Commandes :
$ podman unshare cat /proc/self/uid_map |
Fichiers :
/proc/self/uid_map |
Documentation
MAN podman(1)
MAN podman-exec(1)
MAN podman-info(1)
MAN podman-network(1)
MAN podman-network-create(1)
MAN podman-network-inspect(1)
MAN podmannetwork-ls(1)
MAN podman-port(1)
MAN podman-run(1)
MAN podman-unshare(1)