web-dev-qa-db-fra.com

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

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?

55
Miguel Ping

É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
49
amitmula

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
6
Tomot

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

4
Ivailo Bardarov

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

4
James V

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.

1
Chaim Geretz

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

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

  • Démarrez le service Docker

  • Démarrer le conteneur

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é.

0
user1270949