Tengo problemas para configurar el nombre de host en un contenedor Docker en ejecución. También tengo problemas para comprender cómo especificar el nombre de host después de que se inicia la imagen.
Comencé un contenedor desde una imagen que descargué:
sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
Pero olvidé especificar el nombre de host a través -h
; ¿Cómo puedo especificar el nombre de host ahora que el contenedor se está ejecutando?
run
una imagen, no cuando comienzas un contenedor.docker restart
documentaciónRespuestas:
Editar
/etc/hostname
es una cosa para la que necesita acceso ssh dentro del contenedor. De lo contrario, puede girar el contenedor con la-h
opción.Para configurar el host y los nombres de dominio:
fuente
docker exec /bin/bash
hacerlo en un contenedor en ejecución, no es necesario instalarlossh
(lo cual es una mala práctica para fines de administración).hostname
(capacidad faltante). La ejecucióndocker run -h <hostname> <image> <container-name>
crea un nuevo contenedor con el nombre de host dado.Detener contenedor y servicio
Editar archivo de configuración (JSON) [Primero debe hacer una copia de seguridad]
/var/lib/docker/containers/CONTAINER_ID/config.json
Reemplazar
con
Iniciar contenedor y servicio
(Opcionalmente, también puede adjuntar acoplador)
Los detalles sobre los acopladores (es decir, CONTAINER_NAME, CONTAINER_ID) se pueden obtener ejecutando
fuente
Docker version 17.05.0-ce, build 89658be
Reiniciar el contenedor sería la opción más fácil, pero también puede editar / etc / hostname e ir desde allí.
fuente
/etc/hostname
no tiene efecto después del reinicio, ya que se sobrescribe cada vez con el nombre de host "real", administrado por docker. No puede ejecutarsehostname
en el contenedor, ya que el contenedor no tiene capacidades para esa operación (de forma predeterminada, y no desea cambiar eso)/etc/hostname
y no reiniciar el contenedor no tiene ningún propósito.En caso de que lo use
--net=host
, no puede cambiar el nombre de host desde-h
o dentro del acoplador.Ver https://github.com/docker/docker/issues/5708
fuente
https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces describe una forma de hacerlo. La idea básica es usar
docker inspect
para obtener el pid del contenedor, luego ingrese el espacio de nombres uts del contenedor a través densenter
. La ejecuciónhostname
dentro de ese espacio de nombres cambiará el nombre de host para la instancia de acoplador que comparte ese espacio de nombres.fuente
Como algunos otros han señalado, esto se puede cambiar para contenedores modificando el
config.v2.json
archivo.Solo asegúrese de que el servicio Docker se haya detenido antes de editar el archivo, de lo contrario, se sobreescribirá. Los pasos DEBEN hacerse en este orden
Modificar el
/var/lib/docker/containers/CONTAINER_ID/config.v2.json
archivo -Inicie el servicio Docker
Esto se ha confirmado que funciona para mí en Docker v17.05.0-ce, en un contenedor usando
--net=host
. Modificar el/etc/hostname
archivo no funciona y el archivo simplemente se sobrescribe.fuente
En
encontrar y establecer
fuente
Docker version 17.05.0-ce, build 89658be
. Config se sobrescribe, quién sabe de dónde. Y el nombre de host en sí no cambia después de reiniciar.