Saltar al contenido

Dockerfile HOSTNAME Instrucción para la compilación de docker como docker run -h

Solución:

Recientemente tuve un problema similar.

La solución que funcionó para mí fue establecer el nombre de host en el espacio de nombres del contenedor. Para hacerlo automáticamente, he reunido el siguiente script de compilación de la ventana acoplable:

docker build . | tee >((grep --line-buffered -Po '(?<=^change-hostname ).*' || true) | while IFS= read -r id; do nsenter --target "$(docker inspect -f '{{ .State.Pid }}' "$id")" --uts hostname 'new-hostname'; done)

Justo al final new-hostname se puede reemplazar con el nombre de host deseado.

Mi Dockerfile se ve así:

RUN echo "change-hostname $(hostname)"; 
    sleep 1; 
    printf '%sn' "$(hostname)" > /etc/hostname; 
    printf '%st%st%sn' "$(perl -C -0pe 's/([sS]*)t.*$/$1/m' /etc/hosts)" "$(hostname)" > /etc/hosts; 
    echo 'Installing more stuff...'

La primera línea que se imprime change-hostname $(hostname) (donde el nombre de host debe imprimir la identificación del contenedor actual) indica al buildscript que cambie el nombre de host para ese contenedor. El script de compilación luego consulta el pid para el contenedor y ejecuta hostname 'new-hostname' en su espacio de nombres uts. los sleep 1 simplemente le da al script de construcción algo de tiempo para ajustar el nombre de host correctamente. Entonces modifico /etc/hostname y /etc/hosts para incluir el nombre de host recién establecido.

Esto incluso cambia la salida de uname -n así que estoy bastante seguro de que funcionaría como una solución para la pregunta original.

Déjame ver si entiendo tu pregunta, te gustaría crear una imagen que, cuando se ejecuta como contenedor, tenga el nombre de host en tiempo de ejecución, incluso si el nombre de host utilizado para la construcción no es el mismo. ¿Correcto? Si es así, mi pregunta es la siguiente, ¿puede reconfigurar el software para que tenga un nuevo nombre de host después de instalarlo?

Si esto es posible, recomendaría escribir un script que pueda modificar el nombre de host y usar este script como un ENTRYPOINT. De esta manera, puede garantizar que ha corregido el nombre de host cada vez que se ejecuta su contenedor (con cualquier comando) y no pierde tiempo tratando de forzar el soporte para un nombre de host en particular en el momento de la compilación, lo cual, según su propia admisión, es difícil. hacer.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *