Pour rendre un service accessible, le conteneur doit être lancé en arrière plan. Docker utilise la technique classique du mappage de port : un port de l’hôte va être redirigé vers un port du container.
Docker dispose pour cela d’une interface réseau sur la machine hôte.
ip a … docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:f6:de:8b:5b brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 ...
PS > ipconfig /all ... Carte Ethernet vEthernet (WSL) : Suffixe DNS propre à la connexion. . . : Description. . . . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter Adresse physique . . . . . . . . . . . : 00-15-5D-61-F5-91 DHCP activé. . . . . . . . . . . . . . : Non Configuration automatique activée. . . : Oui Adresse IPv6 de liaison locale. . . . .: fe80::a2f2:e355:be04:5818%80(préféré) Adresse IPv4. . . . . . . . . . . . . .: 172.30.16.1(préféré) Masque de sous-réseau. . . . . . . . . : 255.255.240.0 Passerelle par défaut. . . . . . . . . : IAID DHCPv6 . . . . . . . . . . . : 1342182749 DUID de client DHCPv6. . . . . . . . : 00-01-00-01-2A-76-DE-73-80-FA-5B-3F-40-3C Serveurs DNS. . . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 NetBIOS sur Tcpip. . . . . . . . . . . : Activé ...
Une commande possible est la suivante :
docker run -d -p <IP:port-hôte:port-conteneur> --name <nom conteneur> <image> COMMANDE
Le paramètre permettant le mappage est -p <IP:port-hôte:port-container> :
Le principe est ensuite de lancer le service en même temps que le conteneur sachant que :
docker run -d -p 192.168.0.120 :22222:22 --name servssh ar/ubuntu:ssh /usr/sbin/sshd -D 055fec843da0d633a6b1f3777c1f3b192f0e31ee2d02ba962f81e155a052f3a3
Pour accéder au docker en ssh, à partir de n’importe quel poste :
ssh user@192.168.0.120 -p 22222 The authenticity of host '[192.168.0.120]:22222 ([192.168.0.120]:22222)' can't be established. ECDSA key fingerprint is SHA256:zQ1fPQmICgv7LU/vl/Cz+dOuIm2JmfwPl5tD9XbZtCA. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:22222' (ECDSA) to the list of known hosts. user@192.168.0.120's password: ...
Nous pouvons constater via la commande « docker ps » que l’attribut PORT est maintenant rempli :
... PORTS NAMES … 0.0.0.0:22222→22/tcp servssh
L’option « -p » peut être multiplié autant de fois que nécessaire (si par exemple il y a plusieurs services à exposer dans le conteneur).
Il s’agit d’une commande utile notamment si la création du conteneur se passe mal et si l’accès en ssh n’est pas possible (cette commande ne renvoie rien dans ce cas si tout se passe bien).
docker logs servssh
Travail à faire :