Memo

メモ > サーバ > 各論: Docker > 日時の変更

日時の変更
特定日時でのプログラムの挙動を確認したい場合、サーバ時間を変更することで対応できる。 日時変更の概要は Command.txt の「サーバの日時を設定」を参照。 ※WSL環境では、Dockerコンテナ内で日時を変更すると、その影響がWSL全体(ホストLinux)に及ぶ可能性がある。 WSLはWindowsのハードウェアクロックと常時同期されていないため、 「WSLのシステムクロック=Dockerコンテナのクロック」となっているので注意する。 つまりコンテナを停止して再度起動しても、この日時変更は元に戻らない。 ■準備 以下のプログラムを作成し、現在日時が表示されることを確認しておく。 (今回はPHPとMySQLで取得する時間を確認する。)
<?php try { $pdo = new PDO( 'mysql:dbname=test;host=mysql', 'user', 'userpass' ); $stmt = $pdo->query('SELECT NOW() AS now;'); $data = $stmt->fetch(PDO::FETCH_ASSOC); echo "<p>PHP=" . date('Y-m-d H:i:s') . "</p>\n"; echo "<p>MySQL=" . $data['now'] . "</p>\n"; $pdo = null; } catch (PDOException $e) { exit($e->getMessage()); }
■日時を変更する 以下のとおり、コンテナ内で日時変更ができる。 変更すると、上記プログラムで取得できる時間は、PHPとMySQLの両方に反映されていた。
$ docker container exec -it php bash # id uid=0(root) gid=0(root) groups=0(root) # date Wed Mar 26 18:17:26 JST 2025 # date 040100302025 Tue Apr 1 00:30:00 JST 2025 # date Tue Apr 1 00:30:04 JST 2025 # ntpdate ntp.nict.jp 26 Mar 18:17:53 ntpdate[37]: step time server 133.243.238.164 offset -454349.572419 sec # date Wed Mar 26 18:17:56 JST 2025
ntpdateコマンドが使えない場合、以下のようにしてインストールする。
# apt-get update # apt-get install -y ntpdate # ntpdate ntp.nict.jp
dateコマンドでの日時指定は、「date MMDDhhmmYYYY」という書式になっている。 つまり「040100302025」の場合、「2025年4月1日0時30分」という指定になる。 日時は「date -s '2025-04-01 00:30:00'」のように指定することもできる。 結果は同じ。 ■日時を戻す 以下のコマンドで元に戻すことができる。
# timedatectl set-ntp true
ただし上記コマンドは仮想環境などではエラーになる。(Docker環境でもエラーになった。) この場合、以下のコマンドで元に戻す。
# ntpdate ntp.nict.jp - - - - - - - - - - - - - - - - - - - - - - - - -

Advertisement