Artículo
· 21 ago, 2023 Lectura de 2 min

¿Necesito privilegios de root para cambiar la zona horaria en el contenedor de iris?

Hice una pregunta por correo electrónico y obtuve algunas respuestas de colegas.

Pergunta:

No he podido cambiar la zona horaria en el ultimo container (Ubuntu) de IRIS. Motivos:

  • Soy irisowner y no root

  • No dispongo del comando sudo

En mi Dockerfile he usado los comandos en adjunto de manera a cambiar la zona horaria - a la hora de crearme un nuevo image docker. Sin embargo, estos comandos no me funcionan con un usuario no root.

FROM $IRIS_IMAGE:$IRIS_VERSION
USER root
RUN export DEBIAN_FRONTEND=noninteractive; \
    export DEBCONF_NONINTERACTIVE_SEEN=true; \
    echo 'tzdata tzdata/Areas select Asia' | debconf-set-selections; \
    echo 'tzdata tzdata/Zones/Asia select Shanghai' | debconf-set-selections; \
    apt-get update -qqy && apt-get install -qqy --no-install-recommends tzdata

Soy consciente que en Redhat, puedo hacerlo mediante copia de los ficheros de configuración /etc/timezone y /etc/localtime del host al container, pero esto no me sirve para Ubuntu.

Respuestas:

Usar --env TZ=xxx en el comando docker run, por Ayumu Tanaka

$ docker run -it --name test -detach -p 1972:1972 -p 52773:52773 --env TZ=JST-9 containers.intersystems.com/intersystems/iris:2022.1.2.574.0 --check-caps false

Se necesita que usemos el formato correcto para establecer el valor de TZ - algo como TZ=EST+5, TZ=CST-8. Usando algo como set TZ=Asia/Shanghai no funcionará.


Para obtener root en tiempo de ejecución por Eduard Lebedyuk

Algo como: docker exec -u root -it iris bash


Usar ntpd para mantener el reloj actualizado por Steven Lubars

El contenedor ICM usa ntpd para mantener el reloj actualizado. Además de ejecutarse como root, también se requiere: --cap-add SYS_TIME
Simplemente agregar la capacidad SYS_TIME no sincroniza el tiempo. No he descubierto dónde está htpd y cómo se sincroniza el contenedor con el host, no estoy familiarizado con ICM


Además, Nicholai Mitchko me enseñó un truco para obtener sudo sin contraseña
Aquí hay un pequeño truco para obtener sudo sin contraseña si lo necesita (lo he usado para demostraciones al instalar cosas nuevas en un contenedor en ejecución)

# Configure llamadas root desde la instancia de IRIS para instalar cosas nuevas

USER root
RUN apt-get clean -yq && apt-get update -yq && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl gnupg ca-certificates sudo
RUN /bin/echo -e ${ISC_PACKAGE_MGRUSER}\\tALL=\(ALL\)\\tNOPASSWD: ALL >> /etc/sudoers
RUN sudo -u ${ISC_PACKAGE_MGRUSER} sudo echo enabled passwordless sudo-ing for ${ISC_PACKAGE_MGRUSER}
USER ${ISC_PACKAGE_MGRUSER}
Comentarios (0)1
Inicie sesión o regístrese para continuar