Docker konteynerleri zaman bilgilerini nereden alır? Temel ubuntu: trusty görüntüsünden bazı kaplar oluşturdum ve çalıştırdığımda ve 'tarih' istediğimde UTC saati alıyorum.
Bir süre için Dockerfile'ımda aşağıdakileri yaparak bunu atlattım:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Ancak, bazı nedenlerden dolayı çalışmayı durdurdu. İnternette arama yaparken aşağıda önerilenleri gördüm:
docker run -v /etc/timezone:/etc/timezone [image-name]
Her iki yöntem doğru olsa zaman dilimini ayarlayın.
$ cat /etc/timezoneAmerica/Los_Angeles$ dateTue Apr 14 23:46:51 UTC 2015
Burada gizli olduğunu dpkg-reconfigure tzdata basitçe oluşturur /etc/localtime kopya olarak, bir dosyaya sabit bağlantı veya sembolik bağlantı (sembolik bağlantı tercih edilir) /usr/share/zoneinfo. Bu nedenle, bunu tamamen Docker Dosyanızdan yapmak mümkündür. Düşünmek:
bu doğru değil çünkü yazılım bunun yerine dosyayı gerektirdiğinde çalışmıyor /etc/timezone ayarlanacak. Bu şekilde kullandığınız varsayılan değer olarak bırakır etc/UTC.
Aslında bir docker kabının içindeki saat dilimini ayarlamanın kusursuz ve zarif bir yolu olmadığını belirledim. Sonunda bu çözüme karar verdik:
# Set timezone as specified in /config/etc/timezonedpkg-reconfigure -f noninteractive tzdata
Veri hacmi /config dockerfile, belirli bir ülkeye veya bölgeye yerelleştirilmiş:
# Set the time zoneRUN echo "Europe/London" > /config/etc/timezone
... zarif değil çünkü 3 ayrı dosya içeriyor ve yeniden oluşturuluyor /etc/localtime her çalışma zamanı kapsayıcısını başlatın. Bu oldukça savurgan.
Bununla birlikte, düzgün çalışır ve temel uygulama görüntüsü ile ülke başına yerelleştirilmiş her yapılandırma arasındaki ayrımı başarıyla gerçekleştirir. 3 satırlık kodda.
Konuyla ilgili bilgi ve bağlantı için vonc'ye teşekkürler. Bu çok kafa karıştırıcı bir karmaşa gibi görünüyor, bu yüzden bunu nasıl çözeceğime dair kendi fikrim üzerinde bazı testler yaptım ve harika çalışıyor gibi görünüyor.
>docker run -it ubuntu:trusty /bin/bash#dpkg-reconfigure tzdata
(saat dilimimi seçmek için yönergeleri izleyin)
>docker commit [container-id] chocko/ubuntu:local
Sonra Dockerfiles'ımı bunu yansıtacak şekilde güncelledim:
FROM chocko/ubuntu:local
Bunda bir sorun olmalı çünkü gözden kaçırılmayacak kadar kolay görünüyor... Yoksa bu kabul edilebilir mi?