No se puede escribir en el archivo / etc / hosts desde Dockerfile con RUN

9

Estoy haciendo una imagen de Docker usando un Dockerfile bastante simple. Dentro del Dockerfile tengo este comando:

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

El comando en sí parece estar bien, ya que la creación de la imagen no se detiene en este momento.

El problema es este: al ejecutar la imagen, la línea que se supone que se insertó dentro de "/ etc / hosts" no está allí.

Ahora, busqué y descubrí que antes de la versión 1.2 de Docker, había un problema con el archivo de hosts dentro de los contenedores. En mi caso, estoy usando la versión 1.5, la última a partir de este momento.

¿Me estoy perdiendo de algo?

ACTUALIZACIÓN 1:

Parece que hay muchos problemas para esto, tanto abiertos como cerrados, en las páginas de github de Docker.

dlyk1988
fuente

Respuestas:

12

Esto funciona en docker 1.7.0

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

El truco consiste en agregar el nombre de host en la misma línea que lo usa, de lo contrario, el archivo de hosts se restablecerá, ya que cada comando RUN inicia un nuevo contenedor intermedio. Por ejemplo, esto no funcionará :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost
jonatan
fuente
1
Gracias por la idea! Aunque correcto (lo comprobé) y útil en general, no me sirve de nada en este caso. Necesito que el archivo "hosts" se complete cuando se ejecuta el contenedor.
dlyk1988
2
+1 para ejecutar comandos en la misma línea
myol
7

Después de escribir la actualización de mi pregunta, decidí analizar detenidamente los "problemas" abiertos en github. Resulta que se ha implementado una solución alternativa:

docker run ... --add-host='server:0.0.0.0' ...

Al utilizar el argumento "--add-host ..." al iniciar un contenedor, es posible modificar el archivo de hosts.

dlyk1988
fuente
55
Sin embargo, quiero poder hacer esto en build. La persona que ejecuta el contenedor no debería tener que saber acerca de los hosts internos. ¡Tiene sentido cero!
samsamm777
Me hago eco de @ samsamm777. ¿Me pregunto si hay una buena manera de hacerlo?
Jonathan
Esto realmente es un comportamiento muy sorprendente, que nunca es una buena idea en los sistemas de TI.
Torsten Bronger