82 votes

Comment spécifier le nom d'hôte du conteneur en cours d'exécution ?

J'ai des difficultés à 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 lancée.

J'ai démarré 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 par -h ; comment puis-je spécifier le nom d'hôte maintenant que le conteneur est en cours d'exécution ?

0 votes

Pouvez-vous simplement arrêter le conteneur et le redémarrer en fournissant un nom d'hôte ?

0 votes

AFAIK, cela ne fonctionne que lorsque vous run une image, et non lorsque vous démarrez un conteneur.

0 votes

Parfois, tout ce que vous voulez, c'est voir l'invite de commande bash avec un nom approprié. Dans ce cas, vous pouvez modifier la valeur de PS1 dans .bashrc. Regardez askubuntu.com/a/549150/55365 pour des suggestions. Dans n'importe quel PS1, vous pouvez ajouter une chaîne (colorée) entourée de * ou de # pour la distinguer, avec le nom du serveur ou du service.

76voto

amitmula Points 720

Modifier /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 les noms d'hôte et 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

6 votes

Vous pouvez docker exec /bin/bash sur un conteneur en cours d'exécution, il n'est pas nécessaire d'installer ssh (ce qui est, à mon avis, une mauvaise pratique administrative).

0 votes

Vous pouvez également éditer le fichier /etc/hosts pour qu'il soit correctement résolu en adresse.

8 votes

Vous ne pouvez pas modifier le nom d'hôte d'un conteneur en cours d'exécution à l'aide de la fonction hostname (capacité manquante). Exécution docker run -h <hostname> <image> <container-name> crée un nouveau avec le nom d'hôte donné.

10voto

Tomot Points 399

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

"Nom d'hôte" : "QUELQUE CHOSE"

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 aussi attacher docker)

sudo docker attach CONTAINER_NAME

Les détails concernant les dockers (c'est-à-dire CONTAINER_NAME, CONTAINER_ID) peuvent être obtenus en exécutant la commande suivante

sudo docker ps -a

0 votes

Ne fonctionne pas, il est écrasé à chaque fois que je démarre le conteneur.

0 votes

Je viens de reproduire ces étapes et cela fonctionne toujours. docker version 1.7.1. êtes-vous sûr d'avoir fermé le conteneur et le service avant d'éditer le fichier ?

0 votes

Fonctionne sur Docker 17.04.0-ce, alors que l'édition de /etc/hostname ne fonctionnait pas. Si vous n'avez pas encore créé le conteneur, l'autre réponse avec -h est meilleure, mais dans mon cas, je m'étais déjà donné la peine de configurer le conteneur et je ne voulais pas le recréer juste pour définir le nom d'hôte.

8voto

Ivailo Bardarov Points 179

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.

Voir https://github.com/docker/docker/issues/5708

5voto

James V Points 67

Le redémarrage du conteneur serait l'option la plus simple, mais vous pouvez également modifier /etc/hostname et partir de là.

1 votes

Édition /etc/hostname n'a aucun effet après le redémarrage, puisqu'il est remplacé à chaque fois par le "vrai" nom d'hôte, géré par docker. Vous ne pouvez pas exécuter hostname sur le conteneur, puisque le conteneur n'a pas les capacités pour cette opération (par défaut, et vous ne voulez pas changer cela)

1 votes

Et l'édition /etc/hostname et ne pas redémarrer le conteneur n'a pas de raison d'être.

1voto

Chaim Geretz Points 131

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces décrit un moyen de le faire. L'idée de base est d'utiliser docker inspect pour obtenir le pid du conteneur, puis entrez dans l'espace de nom uts du conteneur via nsenter . Exécuter hostname à l'intérieur de cet espace de nom changera le nom d'hôte de l'instance de docker qui partage cet espace de nom.

3 votes

Veuillez ajouter la solution directement ici, et non pas un lien externe qui pourrait disparaître

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X