run - docker tag example
¿Cómo asegurarme de que el tiempo de Docker se sincronice con el del anfitrión? (10)
Tengo estibadores corriendo en servidores Linode. A veces, veo que no es el momento adecuado para los estibadores. Actualmente he cambiado el script de ejecución en cada ventana acoplable para incluir las siguientes líneas de código.
yum install -y ntp
service ntpd stop
ntpdate pool.ntp.org
Sin embargo, lo que idealmente me gustaría hacer es que el acoplador sincronice el tiempo con el host. ¿Hay alguna forma de hacer esto?
Con la ventana acoplable para ventanas, tuve que marcar
MobyLinuxVM > Settings > Integration Services > Time synchronization
en el administrador de Hyper-V y funcionó
Estaba enfrentando un tiempo compensado de -1 hora y 4 minutos
Al reiniciar Docker mismo se arregló el problema para mí.
Para configurar la zona horaria en general:
ssh en su contenedor:
docker exec -it my_website_name bash
ejecutar
dpkg-reconfigure tzdata
-
date
ejecución
Esto es lo que funcionó para mí con un host Fedora 20. Ejecuté un contenedor usando:
docker run -v /etc/localtime:/etc/localtime:ro -i -t mattdm/fedora /bin/bash
Inicialmente /etc/localtime
era un enlace suave a /usr/share/zoneinfo/Asia/Kolkata
que es el tiempo estándar indio. La date
ejecución dentro del contenedor me mostró la misma hora que en el host. Salí del shell y detuve el contenedor usando el docker stop <container-id>
.
A continuación, eliminé este archivo y lo hice vincular a /usr/share/zoneinfo/Singapore
para fines de prueba. El tiempo de host se estableció en la zona horaria de Singapur. Y luego docker start <container-id>
. Luego accedió a su caparazón nuevamente usando nsenter
y descubrió que el tiempo ahora estaba configurado en la zona horaria de Singapur.
docker start <container-id>
docker inspect -f {{.State.Pid}} <container-id>
nsenter -m -u -i -n -p -t <PID> /bin/bash
Entonces la clave aquí es usar -v /etc/localtime:/etc/localtime:ro
cuando ejecuta el contenedor por primera vez. Lo encontré en este enlace .
Espero eso ayude.
La fuente de esta respuesta es el comentario a la respuesta en: ¿Tiempo de sincronización automática del contenedor docker con la máquina host?
Después de mirar la respuesta, me di cuenta de que no hay forma de que ocurra un cambio de reloj en el contenedor de la caja. Docker usa el mismo reloj que el host y la ventana acoplable no puede cambiarlo. Significa que hacer un ntpdate
dentro de la ntpdate
acoplable no funciona.
Lo correcto es actualizar el host de tiempo usando ntpdate
En lo que respecta a la sincronización de zonas horarias, -v /etc/localtime:/etc/localtime:ro
funciona.
Para Docker en macOS, puede usar docker-time-sync-agent . Esto funciona para mi.
Parece que puede haber desviación de tiempo si está utilizando Docker Machine, como sugiere esta respuesta: https://.com/a/26454059/105562 , debido a VirtualBox.
Una solución rápida y fácil es simplemente reiniciar su VM:
docker-machine restart default
Puede agregar sus archivos locales (/ etc / timezone y / etc / localtime) como volumen en su docker-container.
Actualiza tu docker-compose.yml
con las siguientes líneas.
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
Ahora el tiempo del contenedor es el mismo que en tu host
Si está utilizando boot2docker y ntp no funciona dentro de la máquina acopladora de Docker (está detrás de un proxy que no reenvía paquetes ntp) pero su servidor tiene sincronía de tiempo, puede ejecutar lo siguiente desde su host:
docker-machine ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"
De esta manera, está enviando la hora actual de su máquina (en la zona horaria UTC) como una cadena para configurar la hora de la máquina acopladora usando la date
(nuevamente en la zona horaria UTC).
NOTA: en Windows, dentro de un shell bash (del msys git), use:
docker-machine.exe ssh default "sudo date -u $(date -u +%m%d%H%M%Y)"
Si está utilizando docker-machine, las máquinas virtuales pueden derivar. Para actualizar el reloj en la máquina virtual sin reiniciar la ejecución:
docker-machine ssh <machine-name|default>
sudo ntpclient -s -h pool.ntp.org
Esto actualizará el reloj en la máquina virtual usando NTP y luego todos los contenedores lanzados tendrán la fecha correcta.
Tengo lo siguiente en el archivo de composición
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
Entonces, todo está bien en la ventana acoplable de Gerrit con su conjunto de réplica_log con la marca de tiempo correcta. :-RE