🫠

【Docker CE/WSL】InRelease is not valid yet が発生したら WSL の時刻を更新しよう

2023/12/19に公開

Windows の WSL 環境で Docker CE 利用時に build が急に失敗するようになりました。
解決したので、備忘録として残します。

該当のエラーメッセージ

※適当に改行しています。

Release file for 
http://deb.debian.org/debian-security/dists/bullseye-security/InRelease 
is not valid yet (invalid for another XXmin XXs). 
Updates for this repository will not be applied.

要約

  • PC(Windows) 側と WSL 内部の時刻がずれていることが原因
  • hwclock コマンドを試すか WSL を再起動して時刻を更新する

経緯

  1. ローカル PC で docker up -d したまま PC をスリープし、1時間ほど放置。
  2. 1時間後、docker-compose.yml を更新し docker compose build
  3. 上記のエラーが発生。build に失敗した。

apt-get が失敗していた

build ログを細かく見てみたところ下記のように、apt-get で失敗していたことがわかります。
エラーメッセージを翻訳すると、「リリースファイルがまだ有効ではありません」みたいな感じのことを言われていることがわかります。

------
 > [rails  2/12] RUN apt-get update -qq && apt-get install -y vim:
2.104 E: Release file for http://deb.debian.org/debian-security/dists/bullseye-security/InRelease is not valid yet (invalid for another XXmin XXs). Updates for this repository will not be applied.
------
failed to solve: process "/bin/sh -c apt-get update -qq && apt-get install -y vim" did not complete successfully: exit code: 100

PC と WSL で時刻がずれていると発生するらしい

とにかく時刻がずれていると、apt-get に失敗するらしい。

上記記事にならって、date コマンドを実行して WSL の時刻を確認します。

$ date
>Tue Dec 19 14:50:01 JST 2023

このとき15時30分を回っていたと記憶しているので、約40分とかなりずれていることがわかります。

【解決】とりあえず WSL を再起動する

WSL を再起動するために、powershell で下記コマンドを実行

wsl --shutdown

WSL 側のターミナルで下記のように表示されるので、そのまま再起動 → docker compose build する

[プロセスはコード 1 (0x00000001) で終了しました]
このターミナルを Ctrl+D で閉じるか、Enter キーを押して再起動できます。

$docker compose build --no-cache

hwclock で時刻を更新してもいいらしい

下記のようにシステム・クロックをハードウェア・クロックに合わせる hwclock コマンドで時刻を更新してもいいそうです。

#WSL で実行
$ sudo hwclock --hctosys

--hctosys オプションはシステム・クロックをハードウェア・クロックに合わせるオプションです。

参考

https://ginpen.com/2021/06/05/apt-update-release-file-is-not-valid-yet/
https://zenn.dev/dozo/articles/0cd227743545cc
https://github.com/microsoft/WSL/issues/5324
https://kazmax.zpp.jp/cmd/h/hwclock.8.html

おわり

ありがとうございました。

Discussion