Mappage de port sur des conteneurs
La commande podman run -p
permet de faire un mappage de port, ici entre le port 13306 de l’hôte et le port 3306 du conteneur db_client_2
:
$ podman run -d --name db_client_2 \ |
La commande podman port -a
affiche tous les mappages de ports de conteneur utilisés :
$ podman port -a |
ec32e4a48dbb 3306/tcp -> 0.0.0.0:13306 |
En ciblant un conteneur en particulier ;
$ podman port db_client_2 |
3306/tcp -> 0.0.0.0:13306 |
La commande firewall-cmd
permet au trafic du port 13306 dans l’hôte d’être redirigé vers le conteneur :
# firewall-cmd --add-port=3306/tcp --permanent |
# firewall-cmd --reload |
Note :
- Pour mapper un port sur l’hôte en dessous de 1024 sur un port de conteneur, il faut exécuter Podman en tant que root
- Il est possible de mapper un port supérieur à 1024 sur l’hôte du conteneur vers un port privilégié sur le conteneur, même en rootless
Configuration DNS dans un conteneur
Podman prend en charge 2 réseaux backend pour les conteneurs : Netavark et CNI.
Pour vérifier quel backend réseau est utilisé :
$ podman info --format {{.Host.NetworkBackend}} |
netavark |
Pour modifier le backend réseau, définissez la configuration dans /usr/share/containers/containers.conf
:
[network] |
La commande podman network create
créer un réseau compatible DNS.
Création d’un réseau appelé db_network
en spécifiant le sous-réseau 10.87.0.0/24 et la passerelle 10.87.0.1 :
$ podman network create --gateway 10.87.0.1 --subnet 10.87.0.0/24 db_network |
db_network |
La commande podman network inspect
affiche les informations sur un réseau spécifique :
$ podman network inspect db_network |
[ |
La commande podman run --network
permet d’ajouter le réseau DNS db_network
à un nouveau conteneur :
$ podman run -d --name db_client_2 \ |
Lancement du conteneur ;
$ podman run -d --name siteweb01 --network db_network localhost:5000/ubi9/ubi:latest sleep infinity |
Utilitaires
La commande podman exec
permet d’installer des utilitaires comme iproute
et iputils
:
$ podman exec -it db_client_2 dnf install -y iputils iproute |
$ podman exec -it siteweb01 dnf install -y iputils iproute |
Test de la résolution DNS avec la commande podman exec entre 2 conteneurs.
Du conteneur db_client_2
vers siteweb01
:
$ podman exec -it db_client_2 ping -c3 siteweb01 |
PING siteweb01.dns.podman (10.87.0.3) 56(84) bytes of data. |
Du conteneur siteweb01
vers db_client_2
:
$ podman exec -it siteweb01 ping -c3 db_client_2 |
PING db_client_2.dns.podman (10.87.0.4) 56(84) bytes of data. |
Vérification des adresses IP de chaque conteneur et la résolution DNS.
Conteneur db_client_2
:
$ podman exec -it db_client_2 ip a | grep 10.8 |
inet 10.87.0.4/24 brd 10.87.0.255 scope global eth0 |
Conteneur siteweb01
:
$ podman exec -it siteweb01 ip a | grep 10.8 |
inet 10.87.0.3/24 brd 10.87.0.255 scope global eth0 |
Plusieurs réseaux dans un seul conteneur
Plusieurs réseaux peuvent être connectés à un conteneur en même temps.
La commande podman network create
permet de créer un réseau backend :
$ podman network create backend |
La commande podman network ls
affiche tous les réseaux Podman :
$ podman network ls |
NETWORK ID NAME DRIVER |
Si le sous-réseau et la passerelle n’ont pas été spécifiés avec les options --gateway
et --subnet
, la commande podman network inspect
permet d’obtenir les informations IP du réseau backend :
$ podman network inspect backend |
[ |
La commande podman network connect
permet de connecter des réseaux supplémentaires à un conteneur en cours d’exécution :
$ podman network connect backend db_client_2 |
$ podman network connect backend siteweb01 |
La commande podman inspect
vérifie que les deux réseaux sont connectés à chaque conteneur et pour afficher les informations IP.
Pour le conteneur db_client_2
:
$ podman inspect db_client_2 |
"NetworkSettings": { |
Pour le conteneur siteweb01
:
$ podman inspect siteweb01 |
"NetworkSettings": { |
Le conteneur siteweb01
peut désormais communiquer avec le conteneur db_client_2
sur les deux réseaux.
La commande podman exec
effectue un ping
sur les deux réseaux sur les conteneurs db_client_2
et siteweb01
.
Depuis siteweb01
vers l‘@IP de db_client_2
et de son @IP dans le backend :
$ podman exec -it siteweb01 ping -c3 10.87.0.4 |
$ podman exec -it siteweb01 ping -c3 10.89.0.2 |
Depuis db_client_2
vers l‘@IP de siteweb01
et de son @IP dans le backend :
$ podman exec -it db_client_2 ping -c3 10.87.0.3 |
$ podman exec -it db_client_2 ping -c3 10.89.0.3 |
/!\ Résumé des commandes
Commandes :
$ podman port -a |
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)