J'ai du mal à définir le nom d'hôte sur un conteneur Docker en cours d'exécution. J'ai également du mal à comprendre comment spécifier le nom d'hôte après l'image est démarrée.
J'ai commencé un conteneur à partir d'une image que j'ai téléchargée:
Sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
Mais j'ai oublié de spécifier le nom d'hôte via -h
; comment puis-je spécifier le nom d'hôte maintenant que le conteneur est en cours d'exécution?
Éditer /etc/hostname
est une chose pour laquelle vous avez besoin d'un accès ssh à l'intérieur du conteneur. Sinon, vous pouvez faire tourner le conteneur avec -h
option.
Pour définir l'hôte et les noms de domaine:
$ docker run -h foo.bar.baz -i -t ubuntu bash
root@foo:/# hostname
foo
root@foo:/# hostname -d
bar.baz
root@foo:/# hostname -f
foo.bar.baz
Arrêter le conteneur et le service
Sudo docker stop CONTAINER_NAME
Sudo service docker stop
Modifier le fichier de configuration (JSON) [Vous devez d'abord faire une sauvegarde]
/ var/lib/docker/containers/CONTAINER_ID/config.json
Remplacer
"Hostname": "WHATEVER"
avec
"Nom d'hôte": "NEW_HOSTNAME"
Démarrer le conteneur et le service
Sudo service docker start
Sudo docker start CONTAINER_NAME
(En option, vous pouvez également attacher un docker)
Sudo docker attach CONTAINER_NAME
Les détails sur les dockers (c'est-à-dire CONTAINER_NAME, CONTAINER_ID) peuvent être obtenus en exécutant
Sudo docker ps -a
Si vous utilisez --net=Host
alors vous ne pouvez pas changer le nom d'hôte de -h
ou depuis l'intérieur du docker.
Redémarrer le conteneur serait l'option la plus simple - mais vous pouvez également modifier/etc/hostname et partir de là.
https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces décrit une façon de procéder. L'idée de base est d'utiliser docker inspect
pour obtenir le pid du conteneur, puis entrez l'espace de noms uts du conteneur via nsenter
. L'exécution de hostname
à l'intérieur de cet espace de noms changera le nom d'hôte de l'instance de docker qui partage cet espace de noms.
Comme quelques autres l'ont souligné, cela peut être changé pour les conteneurs en modifiant le config.v2.json
fichier.
Assurez-vous simplement que le service Docker est arrêté avant la modification du fichier, sinon il sera RÉÉCRIT. Les étapes DOIVENT être effectuées dans cet ordre
Modifier le - /var/lib/docker/containers/CONTAINER_ID/config.v2.json
- fichier
Démarrez le service Docker
Cela a été confirmé pour moi sur Docker v17.05.0-ce, sur un conteneur utilisant --net=Host
. Modification du /etc/hostname
le fichier ne fonctionne pas et le fichier est juste écrasé.