メモ > サーバ > 各論: 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
- - - - - - - - - - - - - - - - - - - - - - - - -