from etc domain configurar compose change docker dockerfile hosts

domain - Cómo actualizar el archivo/etc/hosts en la imagen de Docker durante la "compilación de docker"



hosts docker (10)

Quiero actualizar mi /etc/hosts durante la "construcción de docker".

Agregué la siguiente línea en Dockerfile pero no está actualizando el /etc/hosts ni dando ningún error.

RUN echo "192.168.33.11 mynginx" >> /etc/hosts

Necesito actualizar /etc/hosts . ¿Alguien puede sugerir sobre esto?


Como esto todavía aparece como una primera respuesta en Google, aportaré una posible solución.

El comando tomado desde here me funcionó sorprendentemente (Docker 1.13.1, Ubuntu 16.04):

docker exec -u 0 <container-name> /bin/sh -c "echo ''<ip> <name> >> /etc/hosts"


Con una versión más reciente de docker, esto podría hacerse con docker-compose y su directiva extra_hosts

Agregar asignaciones de nombres de host.
Utilice los mismos valores que el parámetro docker run client --add-host (que ya debería estar disponible para docker 1.8).

extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"

En resumen: modifique /etc/hosts de su contenedor al ejecutarlo, no compilarlo.

Con Docker 17.x +, tiene una docker build --add-host menciona a continuación , pero, como se comentó en el problema 34078 y en esta respuesta :

La función --add-host durante la compilación está diseñada para permitir anular un host durante la compilación, pero no para mantener esa configuración en la imagen.

Las soluciones mencionadas hacen referencia al docker-compose que sugería anteriormente:

  • Ejecuta un DNS interno; puede configurar el servidor DNS predeterminado para usar en el demonio; de esa manera, cada contenedor iniciado utilizará automáticamente el DNS configurado de forma predeterminada
  • Utilice docker compose y proporcione un docker-compose.yml a sus desarrolladores.
    El archivo de composición de Docker le permite especificar todas las opciones que se deben utilizar al iniciar un contenedor, por lo que los desarrolladores podrían simplemente componer para iniciar el contenedor con todas las opciones que necesitan configurar.


Estoy usando AWS Elasticbeanstalk + Docker + Supervisord.

Respuesta rápida

Simplemente agregue algo de código en Dockerfile .

CMD echo 123.123.123.123 this_is_my.host >> /etc/hosts; supervisord -n;


No puede modificar el archivo de host en la imagen utilizando echo en el paso RUN porque docker daemon mantendrá el archivo (/ etc / hosts) y su contenido (entrada de hosts) cuando inicie un contenedor desde la imagen.

Sin embargo, lo siguiente puede usarse para lograr lo mismo:

ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ]

La clave para notar aquí es el uso del comando exec como sugiere la documentación de Docker. El uso de exec hará que el comando java sea PID 1 para el contenedor. Las interrupciones de Docker solo responderán a eso.

Ver https://docs.docker.com/engine/reference/builder/#entrypoint


Puede hacerlo con el siguiente comando en el momento de ejecutar Docker

docker run [OPTIONS] <your-image-name>:<your tag> --add-host example.com:127.0.0.1

Aquí estoy mapeando example.com a localhost 127.0.0.1 y está funcionando.


Si esto es útil para alguien, la variable HOSTALIASES env funcionó para mí:

echo "fakehost realhost" > /etc/host.aliases export HOSTALIASES=/etc/host.aliases


Siguiente funcionó para mí montando el archivo durante la ejecución de Docker en lugar de construir Docker

docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>


Solo una respuesta rápida para ejecutar su contenedor usando:

docker exec -it <container name> /bin/bash

Una vez que el contenedor está abierto:

cd ..

entonces

`cd etc`

y luego puedes

cat hosts

o:

apt-get update apt-get vim

o cualquier editor que desee y ábralo en vim, aquí puede modificar, por ejemplo, su ip de inicio a 0.0.0.0


Tis is me Dockefile FROM XXXXX ENV DNS_1="10.0.0.1 TEST1.COM" ENV DNS_1="10.0.0.1 TEST2.COM" CMD ["bash","change_hosts.sh"]` #cat change_hosts.sh su - root -c "env | grep DNS | akw -F "=" ''{print $2}'' >> /etc/hosts"

  • informacion
  • el usuario debe su