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

51

Je ne parviens pas à 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 une fois l'image 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 hostname via -h; Comment puis-je spécifier le nom d'hôte maintenant que le conteneur est en cours d'exécution?

Miguel Ping
la source
Pouvez-vous simplement arrêter le conteneur et le redémarrer en fournissant un nom d'hôte?
dawud
Autant que je sache, cela ne fonctionne que lorsque vous créez runune image et non lorsque vous démarrez un conteneur.
Miguel Ping
Parfois, tout ce que vous voulez, c'est voir l'invite de commande bash avec un nom propre. Si tel est le cas, vous pouvez modifier la valeur PS1 dans .bashrc. Consultez le site askubuntu.com/a/549150/55365 pour obtenir des suggestions. Dans toute PS1, vous pouvez ajouter une chaîne (colorée) entourée par * ou # pour la distinguer, avec le nom du serveur ou du service.
SPRBRN
@dawud vous ne pouvez pas donner un nouveau nom d'hôte lors de l'exécution de la docker restart documentation
dangonfast

Réponses:

48

Editer /etc/hostnameest 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 -hoption.

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
Amitmula
la source
5
Vous pouvez docker exec /bin/bashsur un conteneur en cours d'exécution, pas besoin d'installer ssh(ce qui est une mauvaise pratique pour des raisons d'administration).
Jjmontes
Vous voudrez peut-être aussi éditer / etc / hosts pour qu’il soit correctement résolu en une adresse.
dtoubelis
2
Vous ne pouvez pas modifier le nom d'hôte dans un conteneur en cours d'exécution avec hostname(capacité manquante). L'exécution en cours docker run -h <hostname> <image> <container-name>crée un nouveau conteneur avec le nom d'hôte indiqué.
dangonfast
6

Arrêtez le conteneur et le service

sudo docker stop CONTAINER_NAME
sudo service docker stop

Editer le fichier de configuration (JSON) [Vous devriez d'abord faire une sauvegarde]

/var/lib/docker/containers/CONTAINER_ID/config.json

Remplacer

"Nom d'hôte": "QUOI QUE CE SOIT"

avec

"Nom d'hôte": "NEW_HOSTNAME"

Commencez conteneur et service

sudo service docker start
sudo docker start CONTAINER_NAME

(Facultativement, vous pouvez également attacher un menu fixe)

sudo docker attach CONTAINER_NAME

Des détails sur les dockers (par exemple, CONTAINER_NAME, CONTAINER_ID) peuvent être obtenus en exécutant

sudo docker ps -a
Tomot
la source
ne fonctionne pas. être écrasé à chaque fois que je démarre le conteneur.
Ahmed
C'est étrange. Je viens de reproduire ces étapes et cela fonctionne toujours. version de docker 1.7.1. Êtes-vous sûr d'avoir fermé le conteneur et le service avant de modifier le fichier?
Tomot
Fonctionne sur Docker 17.04.0-ce, pas avec la modification de / etc / hostname. Si vous n'avez pas encore créé le conteneur, l'autre réponse avec -h est préférable, mais dans mon cas, j'avais déjà pris la peine de configurer le conteneur et je ne voulais pas le recréer uniquement pour définir le nom d'hôte.
Una
Ne fonctionne pasDocker version 17.05.0-ce, build 89658be
dangonfast
4

Redémarrer le conteneur serait l'option la plus simple - mais vous pouvez aussi éditer / etc / hostname et commencer à partir de là.

James V
la source
La modification /etc/hostnamen'a aucun effet après le redémarrage, car elle est écrasée à chaque fois par le "vrai" nom d'hôte, géré par le menu fixe . Vous ne pouvez pas exécuter hostnamesur le conteneur, car celui-ci ne dispose pas de fonctionnalités pour cette opération (par défaut, et vous ne souhaitez pas le modifier)
dangonfast
Et éditer /etc/hostnameet ne pas redémarrer le conteneur n'a aucun but.
dangonfast
1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces décrit un moyen de le faire. L'idée de base est d'utiliser docker inspectpour obtenir le pid du conteneur, puis entrez l'espace de noms Uts du conteneur via nsenter. L'exécution à l' hostnameintérieur de cet espace de noms modifiera le nom d'hôte de l'instance de menu fixe qui partage cet espace de noms.

Chaim Geretz
la source
2
s'il vous plaît ajoutez la solution directement ici, et pas un lien externe qui pourrait disparaître
Orphans
0

Comme quelques-uns l'ont souligné, cela peut être modifié pour les conteneurs en modifiant le config.v2.jsonfichier.

Assurez-vous simplement que le service Docker est arrêté avant la modification du fichier, sinon ce sera OVERWRITTEN. Les étapes DOIVENT être effectuées dans cet ordre

  • Arrêtez le conteneur
  • Arrêtez le service Docker
  • Modifier le /var/lib/docker/containers/CONTAINER_ID/config.v2.jsonfichier - -

  • Démarrer le service Docker

  • Démarrer le conteneur

Cela a été confirmé que je travaille sur Docker v17.05.0-ce, sur un conteneur utilisant --net=host. La modification du /etc/hostnamefichier ne fonctionne pas et le fichier est simplement écrasé.

utilisateur1270949
la source
-3

Dans

 /var/lib/docker/containers/CONTAINER/config.json

trouver et définir

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}
Oleg Neumyvakin
la source
Ne fonctionne pas Docker version 17.05.0-ce, build 89658be. La configuration est écrasée, qui sait d'où. Et le nom d’hôte lui-même ne change pas après le redémarrage.
dangonfast