Come specificare il nome host per il contenitore in esecuzione?


51

Ho problemi a impostare il nome host su un contenitore docker in esecuzione. Ho anche difficoltà a capire come specificare il nome host dopo l'avvio dell'immagine.

Ho avviato un contenitore da un'immagine che ho scaricato:

sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss

Ma ho dimenticato di specificare il nome host tramite -h; come posso specificare il nome host ora che il contenitore è in esecuzione?


Puoi semplicemente fermare il contenitore e riavviarlo fornendo un nome host?
Dawud,

AFAIK che funziona solo quando runun'immagine, non quando si avvia un contenitore.
Miguel Ping,

A volte tutto ciò che vuoi è vedere il prompt dei comandi bash con un nome proprio. In tal caso, puoi modificare il valore PS1 in .bashrc. Consulta askubuntu.com/a/549150/55365 per suggerimenti. In qualsiasi PS1 puoi aggiungere una stringa (colorata) circondata da * o # per distinguerla, con il nome del server o del servizio.
SPRBRN,

@dawud non è possibile assegnare un nuovo nome host durante l' docker restart
esecuzione della

Risposte:


48

La modifica /etc/hostnameè una cosa per la quale è necessario l'accesso ssh all'interno del contenitore. Altrimenti, puoi ruotare il contenitore con l' -hopzione.

Per impostare i nomi host e dominio:

$ 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

5
È possibile docker exec /bin/bashsu un contenitore in esecuzione, non è necessario installarlo ssh(il che è una cattiva pratica a fini amministrativi).
jjmontes,

Puoi anche modificare / etc / hosts che sia stato correttamente risolto in un indirizzo.
dtoubelis,

2
Non è possibile modificare il nome host in un contenitore in esecuzione con hostname(funzionalità mancante). In esecuzione docker run -h <hostname> <image> <container-name>crea un nuovo contenitore con il nome host specificato.
dangonfast

6

Interrompere il contenitore e il servizio

sudo docker stop CONTAINER_NAME
sudo service docker stop

Modifica file di configurazione (JSON) [Dovresti prima effettuare il backup]

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

Sostituire

"Nome host": "qualunque"

con

"Nome host": "NEW_HOSTNAME"

Avviare il contenitore e il servizio

sudo service docker start
sudo docker start CONTAINER_NAME

(Opzionalmente puoi anche collegare una finestra mobile)

sudo docker attach CONTAINER_NAME

I dettagli sui docker (ovvero CONTAINER_NAME, CONTAINER_ID) possono essere ottenuti eseguendo

sudo docker ps -a

non funziona viene sovrascritto ogni volta che avvio il contenitore.
Ahmed,

È strano. ho appena riprodotto questi passaggi e funziona ancora. docker versione 1.7.1. sei sicuro di aver chiuso il contenitore e il servizio prima di modificare il file?
Tomot,

Funziona su Docker 17.04.0-ce, quando la modifica di / etc / hostname no. Se non hai ancora creato il contenitore, l'altra risposta con -h è migliore, ma nel mio caso avevo già avuto il problema di impostare il contenitore e non volevo ricrearlo solo per impostare il nome host.
Una

Non funzionaDocker version 17.05.0-ce, build 89658be
dangonfast

4

Il riavvio del contenitore sarebbe l'opzione più semplice, ma puoi anche modificare / etc / hostname e andare da lì.


La modifica /etc/hostnamenon ha alcun effetto dopo il riavvio, poiché viene sovrascritta ogni volta con il nome host "reale", gestito dalla finestra mobile. Non è possibile eseguire hostnamesul contenitore, poiché il contenitore non dispone di funzionalità per tale operazione (per impostazione predefinita e non si desidera modificarlo)
dangonfast

Ed editare /etc/hostnamee non riavviare il contenitore non ha scopo.
dangonfast


1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces descrive un modo per farlo. L'idea di base è usare docker inspectper ottenere il pid del contenitore, quindi inserire lo spazio dei nomi uts del contenitore tramite nsenter. L'esecuzione hostnameall'interno di quello spazio dei nomi cambierà il nome host per l'istanza della finestra mobile che condivide tale spazio dei nomi.


2
aggiungi la soluzione direttamente qui, e non un link esterno che potrebbe non essere più visualizzato
Orphans

0

Come alcuni altri hanno sottolineato, questo può essere modificato per i contenitori modificando il config.v2.jsonfile.

Assicurati solo che il servizio Docker sia arrestato prima che il file venga modificato, altrimenti sarà SOVRAPPOSTO. I passaggi DEVONO essere eseguiti in questo ordine

  • Ferma il contenitore
  • Interrompere il servizio Docker
  • Modifica il /var/lib/docker/containers/CONTAINER_ID/config.v2.jsonfile - -

  • Avviare il servizio Docker

  • Avvia il contenitore

Questo è stato confermato lavorando per me su Docker v17.05.0-ce, su un container usando --net=host. La modifica del /etc/hostnamefile non funziona e il file viene appena sovrascritto.


-3

Nel

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

trova e imposta

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}

Non funziona Docker version 17.05.0-ce, build 89658be. Config viene sovrascritto, chissà da dove. E il nome host stesso non cambia dopo il riavvio.
dangonfast,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.