概要
Docker~UbuntuでタイムゾーンをUTC
→JST
に変更した時の手順。
手動で設定
最初はUTC
タイムゾーンの設定なしにコンテナを起動するとUTCになっている。
1 2 |
# date Wed Nov 15 12:38:34 UTC 2023 |
この時点で/etc/timezoneファイルは存在しない。
1 2 3 4 5 6 7 8 9 10 |
# ls /etc adduser.conf debian_version gshadow ld.so.cache mke2fs.conf passwd rc6.d subgid alternatives default gss ld.so.conf mtab profile rcS.d subuid apt deluser.conf host.conf ld.so.conf.d netconfig profile.d resolv.conf sysctl.conf bash.bashrc dpkg hostname legal networks rc0.d rmt sysctl.d bindresvport.blacklist e2scrub.conf hosts libaudit.conf nsswitch.conf rc1.d security systemd cloud environment init.d login.defs opt rc2.d selinux terminfo cron.d fstab issue logrotate.d os-release rc3.d shadow update-motd.d cron.daily gai.conf issue.net lsb-release pam.conf rc4.d shells xattr.conf debconf.conf group kernel machine-id pam.d rc5.d skel |
tzdataのインストール
tzdata
をインストール。タイムゾーンの選択は対話形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# apt-get install -y tzdata Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: tzdata ・・・・・ Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located. 1. Africa 2. America 3. Antarctica 4. Australia 5. Arctic 6. Asia 7. Atlantic 8. Europe 9. Indian 10. Pacific 11. US 12. Etc Geographic area: 6 Please select the city or region corresponding to your time zone. 1. Aden 11. Baku 21. Damascus 31. Hong_Kong 41. Kashgar 51. Makassar 61. Pyongyang 71. Singapore 81. Ujung_Pandang 2. Almaty 12. Bangkok 22. Dhaka 32. Hovd 42. Kathmandu 52. Manila 62. Qatar 72. Srednekolymsk 82. Ulaanbaatar 3. Amman 13. Barnaul 23. Dili 33. Irkutsk 43. Khandyga 53. Muscat 63. Qostanay 73. Taipei 83. Urumqi 4. Anadyr 14. Beirut 24. Dubai 34. Istanbul 44. Kolkata 54. Nicosia 64. Qyzylorda 74. Tashkent 84. Ust-Nera 5. Aqtau 15. Bishkek 25. Dushanbe 35. Jakarta 45. Krasnoyarsk 55. Novokuznetsk 65. Rangoon 75. Tbilisi 85. Vientiane 6. Aqtobe 16. Brunei 26. Famagusta 36. Jayapura 46. Kuala_Lumpur 56. Novosibirsk 66. Riyadh 76. Tehran 86. Vladivostok 7. Ashgabat 17. Chita 27. Gaza 37. Jerusalem 47. Kuching 57. Omsk 67. Sakhalin 77. Tel_Aviv 87. Yakutsk 8. Atyrau 18. Choibalsan 28. Harbin 38. Kabul 48. Kuwait 58. Oral 68. Samarkand 78. Thimphu 88. Yangon 9. Baghdad 19. Chongqing 29. Hebron 39. Kamchatka 49. Macau 59. Phnom_Penh 69. Seoul 79. Tokyo 89. Yekaterinburg 10. Bahrain 20. Colombo 30. Ho_Chi_Minh 40. Karachi 50. Magadan 60. Pontianak 70. Shanghai 80. Tomsk 90. Yerevan Time zone: 79 Current default time zone: 'Asia/Tokyo' Local time is now: Wed Nov 15 21:40:05 JST 2023. Universal Time is now: Wed Nov 15 12:40:05 UTC 2023. Run 'dpkg-reconfigure tzdata' if you wish to change it. |
無事JST
に変更されている。
1 2 |
# date Wed Nov 15 21:40:09 JST 2023 |
/etc/timezoneファイルが作成され、内容はAsia/Tokyo
となっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# ls /etc adduser.conf deluser.conf hosts login.defs pam.conf rc6.d sysctl.conf alternatives dpkg init.d logrotate.d pam.d rcS.d sysctl.d apt e2scrub.conf issue lsb-release passwd resolv.conf systemd bash.bashrc environment issue.net machine-id profile rmt terminfo bindresvport.blacklist fstab kernel mke2fs.conf profile.d security timezone cloud gai.conf ld.so.cache mtab rc0.d selinux update-motd.d cron.d group ld.so.conf netconfig rc1.d shadow xattr.conf cron.daily gshadow ld.so.conf.d networks rc2.d shells debconf.conf gss legal nsswitch.conf rc3.d skel debian_version host.conf libaudit.conf opt rc4.d subgid default hostname localtime os-release rc5.d subuid root@c30c13cb4b9c:/# cat /etc/timezone Asia/Tokyo |
Dockerfile
tzdataのインストール
最初にtimedatectl
のインストールを試みたが、エラーでインストールできなかった。そこでtzdata
をインストールする。
ENV
で非インタラクティブモードに設定するのが定石らしい。
1 2 3 4 5 6 7 8 |
FROM ubuntu:latest ENV DEBIAN_FRONTEND=noninteractive RUN \ apt-get update && \ apt-get upgrade -y && \ apt-get install -y tzdata |
正常終了するが、UTC
のまま。
1 2 |
# date Wed Nov 15 13:08:28 UTC 2023 |
/etc/timezoneは作成されていて、内容はEtc/UTC
になっている。
1 2 |
# cat /etc/timezone Etc/UTC |
/etc/timezoneの書き換えによる設定
Dockerfileを編集して、Asia/Tokyo
の設定を追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
FROM ubuntu:latest ENV DEBIAN_FRONTEND=noninteractive ENV TZ Asia/Tokyo RUN \ apt-get update && \ apt-get upgrade -y && \ apt-get install -y tzdata RUN \ echo "${TZ}" > /etc/timezone && \ dpkg-reconfigure -f noninteractive tzdata |
date
コマンドではJST
になっているのが確認できる。
1 2 |
# date Wed Nov 15 22:20:43 JST 2023 |
ただし、/etc/timezoneの内容はEtc/Asia
ではなくEtc/UTC
のまま(echo
が効いていない?)。
1 2 |
# cat /etc/timezone Etc/UTC |
また、/etc/localtimeはEtc/UTC
へのシンボリックリンクが張られている。
1 2 |
# ls -al /etc/localtime lrwxrwxrwx 1 root root 27 Nov 16 11:28 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC |
この方法は、システムのローカルタイムはJST
になっているものの、/etc/timezone、/etc/localtimeともUTC
のままなのが気になる。
/etc/localtimeへのシンボリックによる設定
Dockerfileを以下のように変更して試してみた。
1 2 3 4 5 6 7 8 9 |
FROM ubuntu:latest ENV DEBIAN_FRONTEND=noninteractive RUN \ apt-get update && \ apt-get upgrade -y && \ apt-get install -y tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime |
date
コマンドではJST
、/etc/timezoneはEtc/UTC
で、/etc/localtimeはAsia/Tokyo
へのシンボリックリンクとなっていた。
1 2 3 4 5 6 |
# date Thu Nov 16 12:09:26 JST 2023 # cat /etc/timezone Etc/UTC # ls -al /etc/localtime lrwxrwxrwx 1 root root 30 Nov 16 12:05 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo |
この方法では、システムのローカルタイムはJST
となり、/etc/timezoneはUTC
のままだが、/etc/localtimeはAsia/Tokyo
となった。