Dari mana kontainer Docker mendapatkan informasi waktu mereka? Saya telah membuat beberapa wadah dari ubuntu dasar: trusty image, dan ketika saya menjalankannya dan meminta 'Tanggal', saya mendapatkan waktu UTC.
Untuk sementara saya mengatasi ini dengan melakukan hal berikut di Dockerfile saya:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Namun, untuk beberapa alasan yang berhenti bekerja. Mencari online saya melihat di bawah ini disarankan:
docker run -v /etc/timezone:/etc/timezone [image-name]
Kedua metode ini mengatur zona waktu dengan benar!
$ cat /etc/timezoneAmerica/Los_Angeles$ dateTue Apr 14 23:46:51 UTC 2015
Rahasianya di sini adalah bahwa dpkg-reconfigure tzdata cukup menciptakan /etc/localtime sebagai salinan, hardlink atau symlink (symlink lebih disukai) ke file di /usr/share/zoneinfo. Jadi dimungkinkan untuk melakukan ini sepenuhnya dari Dockerfile Anda. Pertimbangkan:
hal ini tidak benar karena tidak bekerja ketika perangkat lunak membutuhkan bukan file /etc/timezone untuk diatur. Dengan cara itu Anda menggunakan daun sebagai nilai default etc/UTC.
Saya telah menentukan bahwa sebenarnya tidak ada cara elegan yang sangat mudah untuk mengatur zona waktu di dalam wadah buruh pelabuhan. Jadi akhirnya menetap di solusi ini:
# Set timezone as specified in /config/etc/timezonedpkg-reconfigure -f noninteractive tzdata
Volume Data /config dockerfile, dilokalkan ke negara atau wilayah tertentu:
# Set the time zoneRUN echo "Europe/London" > /config/etc/timezone
... hal ini tidak elegan karena melibatkan 3 file terpisah, dan menciptakan kembali /etc/localtime pada setiap awal kontainer runtime. Yang agak boros.
Namun itu berfungsi dengan baik, dan berhasil mencapai pemisahan antara gambar aplikasi dasar, dan setiap konfigurasi lokal per negara. Dalam 3 baris kode.
Terima kasih kepada VonC untuk informasi dan link ke masalah ini. Ini sepertinya kekacauan yang berbelit-belit, jadi saya melakukan beberapa pengujian pada ide saya sendiri tentang bagaimana menyelesaikan ini dan tampaknya bekerja dengan baik.
>docker run -it ubuntu:trusty /bin/bash#dpkg-reconfigure tzdata
(ikuti petunjuk untuk memilih zona waktu saya)
>docker commit [container-id] chocko/ubuntu:local
Kemudian saya memperbarui Dockerfiles saya untuk mencerminkan ini:
FROM chocko/ubuntu:local
Pasti ada yang salah dengan ini karena sepertinya terlalu mudah untuk diabaikan... Atau apakah ini dapat diterima?