初心者です。Docker+Rails6+Nuxt.jsで認証機能付きのポートフォリオサイトを作ろうとしていたある日のことです。
Nuxt.jsアプリを動かすためのDockerimageが突然ビルドできなくなり、以下のようなエラーがコンソールに出力されていました。
初心者なのでエラー文と仲良くする習慣づけのために備忘録残しておきます。
(それにしても急に出たのはなんでだろう、タイミングよくサポートするバージョンが変わったんだろうか)
エラー文
動いてた時代のDockerFileのままdocker buildしてみたらこんなエラーが出ました。
126.4 error cssnano@7.0.3: The engine "node" is incompatible with this module. Expected version "^18.12.0 || ^20.9.0 || >=22.0". Got "16.13.1"
126.5 error Found incompatible module.
126.5 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
nodeのバージョンが悪いって言われてる...?今まで文句言わなかったくせに...
環境情報
環境はこんな感じ
OS:MacOS 14.1.1(Sonoma)
DockerFileにはこんな感じでAlpineベースのnodeを指定していました。
FROM node:16.13.1-alpine
念の為dockerコンテナ上のnodeのバージョンを確認
$ docker-compose run --rm front node -v
v16.13.1
当たり前に自分が指定したバージョンで動いてました。怖いからやりたくないけど言われた通りにnodeのバージョン上げるしかないのね
バージョンアップ先のnodeを決めよう
Expected version "^18.12.0 || ^20.9.0 || >=22.0". Got "16.13.1"
お前は16.13.1とかいう古いバージョン使いすぎてるから最低でも18.12.0とかにしなさいよ、ということか。
素直なので一番今のバージョンに近い18.12.0にしてみることにする。
ちなみにNode.jsの16系のサポートは2023年にとっくに切れていた。なんで環境構築初期は動いてたんだろう。わかりません
nodeの新しいイメージのタグを探しに行く
DockerFileで指定するベースイメージとなるnodeのタグを探しに行く。
指定する用のタグはdockerhubで確認できる。
自分は今回AlpineLinuxのイメージを使うことに。
お目当てのタグを控えます>18.12.0-alpine
DockerFileを修正しよう
今まで指定していた古いバージョンの記載を消して、dockerhubから連れてきた新しいバージョンを指定してやります。
#FROM node:16.13.1-alpine //コメントアウト
FROM node:18.12.0-alpine //新規追加
ビルドし直してみる!
DockerFileで指定した新しいNodeのバージョンでビルドし直してみる。
$ docker-compose build
[+] Building 467.9s (24/24) FINISHED
せ、成功だ〜〜〜〜〜〜〜!!!!!!!
結論
普通にエラー文読もう