Yerel / zaman dilimini en genel ve dağıtıcı olmayan şekilde nasıl ayarlayabilirim?


4

Yanlış saat diliminde çalışan bir liman işçisi konteyner oluşturdum. Şahsen saat dilimimde çalışması için ihtiyacım var (Avrupa / Stockholm, GMT + 1). Proje açık kaynak olduğundan, diğer kullanıcılar da bunu değiştirmek isteyebilir. Birisinin bunu değiştirmesini kolaylaştırmak istiyorum; Dockerfile veya docker-compose.yml içinde.

Mümkünse, birisinin farklı bir dağıtım kullanmak istediği durumlarda çözümün yalnızca CentOS'ta da uygulanmamasını diliyorum.

Docker konteynerimdeki yerel / zaman dilimini ayarlamak için en karmaşık agnostik yaklaşım nedir?


Bu iki yaklaşım ortak görünmektedir ancak benim için gerçekten en iyi yol olup olmadıklarından emin değilim:

TZ ortam değişkeni

Bazı Linux dağıtımları TZ ortam değişkenini okur. Ancak, kullandığımda işe yaramadığını fark ediyorum centos:7 görüntüsü.

/ Etc / localtime

Konteynerin haritasını çıkarabilirsiniz. /etc/localtime için /etc/localtime docker-compose.yml içindeki ana bilgisayarda. Ancak bunu yaparken, bu dağıtımları /etc/timezone UTC'de bırakılmış ve ardından yanlış zaman dilimini okuyacak olan okunabilecek yazılımlar bırakılmıştır.


/etc/localtime nihai geri dönüş yeridir. Yine de son paragrafını anlamıyorum. Çoğu durumda bir sembolik bağlantıdır. Asıl dosyanın kaba aktarılması istenen sonucu vermelidir.
Daniel B

@DanielB Bununla ilgilensen bile demek istedim /etc/localtime bazı yazılımlar güveniyor görünüyor /etc/timezone. Bu yüzden merak ediyordum ki /etc/localtime yaklaşım gerçekten en iyisiydi.
fredrik

Öyleyse bu yazılımın düzeltilmesi gerekiyor. /etc/localtime OS X ve FreeBSD dahil hemen hemen her yerde bulunur.
Daniel B

1
Gibi bazı dağıtımlar: RUN yankı "Avrupa / Stockholm" & gt; / etc / timezone Diğerleri: RUN ln -s / usr / share / zoneinfo / Avrupa / Stockholm / etc / localtime
joat

Yanıtlar:


3

Distro-agnostik, hangi dağıtımın kullanıldığını tespit eden bir komut dosyası gerektirir. Bunun sebebi, her dağıtılmış “ailenin” farklı zaman dilimlerine dikkat çekmesidir. Bazıları için Docker dosyasına aşağıdakiler eklemek işe yarayabilir:

RUN echo "Avrupa / Stockholm" & gt; / Etc / zaman dilimi

Diğerleri (örneğin Debian) yukarıdakilerin kullanılmasını gerektirir ve daha sonra aşağıdaki gibi başka bir Dockerfile komutu ile aşağıdakileri gerektirir:

RUN RUN sudo dpkg-yeniden yapılandırma -fraktif olmayan tzdata

Diğer dağıtımlar (CentOS dahil olmak üzere IIRC) aşağıdakileri gerektirir:

RUN ln - / usr / hisse / zoneinfo / Avrupa / Stockhom / etc / localtime

Dağıtımı engellemek, her bir dağıtıcının zaman dilimini yeniden yapılandırma yöntemini araştırmayı gerektirir. / Etc / localtime dosyasına bakarsanız, bunun bir metin dosyası olmadığını göreceksiniz.


Bazı uygulamalar OS saat dilimi ayarını yine de görmezden geliyor: -7. Örneğin. jenkins java tabanlı, jenkins servis / start betiğinde zaman dilimini ayarlamak için bazı java değişkenlerini geçmeniz gerekiyor. Dolayısıyla, Distro-agnostic ve App-agnostic, sadece / etc / localtime ve / etc / timezone öğesinden daha fazla senaryo içermelidir.
gaoithe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.