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ámetrodocker 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.
Creo que
--add-host
agregó recientemente el
--add-host
a la construcción de
--add-host
que es realmente genial.
[Editar] Entonces esta característica se actualizó el 17.04.0-ce
Para obtener más detalles sobre cómo usar
--add-host
con el
--add-host
, visite:
https://docs.docker.com/edge/engine/reference/commandline/build/
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