Après le panneau d'installation, vous avez 3 réseaux par défaut:
docker network ls
NETWORK ID NAME DRIVER SCOPE
f3be8b1ef7ce bridge bridge local
fbff927877c1 host host local
023bb5940080 none null local
J'essaie de garder cela simple. Donc, si vous commencez un conteneur par défaut, il sera créé à l'intérieur de la passerelle (docker0) du réseau.
$ docker run -d jenkins
1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell
Dans le dockerfile de jenkins les ports 8080
et 50000
sont exposés. Ces ports sont ouverts pour le conteneur sur son pont réseau. Donc, tout à l'intérieur de ce pont réseau peut accéder au conteneur sur le port 8080
et 50000
. Tout dans le pont réseau est dans le privé gamme de "Subnet": "172.17.0.0/16",
Si vous voulez y accéder de l'extérieur, vous devez mapper les ports -p 8080:8080
. Cela permettra de mapper le port de votre conteneur au port de votre serveur réel (le réseau de l'hôte). L'accès à votre serveur en 8080
route pour votre bridgenetwork sur le port 8080
.
Maintenant vous avez aussi votre réseau hôte. Qui n'a pas de placer les conteneurs de réseautage. Donc, si vous commencez un conteneur dans le réseau de l'hôte, il ressemblera à ceci (c'est le premier):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini
1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell
La différence avec les ports. Votre conteneur est maintenant à l'intérieur de votre réseau hôte. Donc, si vous ouvrez le port 8080
sur votre hôte vous permettra d'accéder au conteneur immédiatement.
$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT
J'ai ouvert le port 8080
dans mon pare-feu, et lorsque je suis maintenant accès aux mon serveur sur le port 8080
je suis à accéder à mon jenkins. Je pense que ce blog est également utile de mieux le comprendre.