bashdocker run -dit --name client --network reseau-lan --ip 192.168.50.10 alpine
docker run -dit --name poste2 --network reseau-lan --ip 192.168.50.20 alpine
Les deux obtiennent exactement l'adresse demandée. Les deux essais suivants échouent, et pas pour la même raison :
bashdocker run -dit --name doublon --network reseau-lan --ip 192.168.50.10 alpine
sortiedocker: Error response from daemon: failed to set up container networking:
Address already in use
bashdocker run -dit --name test-ip --ip 172.17.0.50 alpine
sortiedocker: Error response from daemon: invalid config for network bridge:
invalid endpoint settings: user-specified IP address is supported on
user-defined networks only
Le premier refus est un conflit : l'adresse est prise. Le second
est un interdit : le réseau par défaut ne gère pas les adresses
imposées, quelle que soit l'adresse. D'où la déduction attendue — une adresse
fixe n'est possible que sur un réseau qu'on a créé soi-même.
🛠️ Pourquoi le sujet demande de nettoyer en 4.4
Parce que les deux essais ne laissent pas la même trace. doublon a été
créé puis a échoué au démarrage : il apparaît à l'état
Created et il occupe le nom. test-ip, lui, a été refusé
avant d'exister — docker rm -f test-ip n'a donc rien à
supprimer, et ne s'en plaint pas.
bashdocker ps -a --format '{{.Names}} | {{.Status}}'
sortiedoublon | Created
poste2 | Up Less than a second
client | Up Less than a second
Un conteneur à l'état Created est un piège discret : il ne
tourne pas, il n'apparaît pas dans docker ps sans -a, et
pourtant il réserve son nom. Le prochain run --name doublon échouera
sans qu'on comprenne pourquoi.
Question 4.1 — fixe ou nom ? L'adresse fixe sert quand quelque chose
d'extérieur à Docker doit viser le conteneur : une règle de pare-feu, une route, un
équipement qui ne fait pas de DNS, un fichier de configuration qu'on ne maîtrise pas.
Partout ailleurs, le nom suffit et vaut mieux : il survit au
redémarrage, il ne crée pas de conflit, et il n'oblige pas à tenir un plan
d'adressage à jour.