Error [corepack: not found]

corepack: not found の直し方(Node 25 以降の配布に corepack が入っていない)

FIX SUMMARY verified
Applies when
node:26.7.0-alpineNode.js 25.0.0+ (corepack no longer distributed), node:26 images (Yarn 1.x no longer bundled)corepack enable in a Dockerfile or CI step after the Node image moves from 24 to 25 or 26

Verified: reproduced in node:26.7.0-alpine, then the corepack: not found signature was gone after the fix (exit 0).

Node のイメージを上げたら、corepack enable の行で CI が止まります。

$ corepack enable
sh: corepack: not found

終了コードは 127(コマンドが見つからないときの値)です。同じ原因で当たる表示ゆれは次のとおりです。

  • sh: corepack: not found(Alpine の BusyBox ash)
  • sh: 1: corepack: not found(Debian 系の dash)
  • bash: line 1: corepack: command not found(bash)
  • yarn: not found / yarn: command not found(Node 26 のイメージでは Yarn も消えています。後述の二段目)

修正は corepack を npm から入れることです。 corepack enable の前に 1 行足します。

RUN npm install -g corepack@latest && corepack enable

@latest は corepack 自身が案内している入れ方ですが、ビルドの再現性が要るなら版を固定してください。この記事が説明している対応 Node 版や shim の衝突は、latest が別の版へ動けば変わります。

Node 25 のイメージでは、この 1 行がそのままでは通りません(/usr/local/bin/yarn と衝突します)。回避は後述します。Node 26 では衝突しません。

なぜ Node 25 以降で出るのか:配布から外すと決めた

corepack は Node 25.0.0 のリリースノートに載っています(配布の停止が SEMVER-MAJOR、tarball からの削除は Semver-Patch)。

"stop distributing Corepack" (PR #57617)
"remove corepack from release tarballs" (PR #59835)

この PR の本文は、実装の理由を書かずに TSC の投票だけを参照しています(nodejs/TSC#1697)。投票は「Should Corepack stay in the Node.js distribution?」という題で 2025-03-19 に締め切られ、参加率 94.44% で次の選択肢が選ばれました。

Phase out later: stop distributing Corepack (i.e. the distribution will no longer contain a corepack executable) on future (i.e. 25+) release lines of Node.js – existing release lines as well as the very next (i.e. 24.x) will keep it as experimental.

動かなくなったのではなく、配布をやめると決めたものです。 「24.x までは experimental のまま残し、25 以降で外す」という段取りまで選択肢の文面に書いてあります。だから 24 系では今も同梱されていて、上げた瞬間に消えます。

同じコマンドをイメージだけ変えて回した結果です。

イメージnode -vcorepack --version
node:24.19.0-alpinev24.19.00.35.0
node:25.0.0-alpinev25.0.0sh: corepack: not found(127)
node:26.7.0-alpinev26.7.0sh: corepack: not found(127)

/usr/local/bin の中身にもそのまま出ます。

$ docker run --rm node:24-alpine sh -c 'ls /usr/local/bin'
corepack  docker-entrypoint.sh  node  nodejs  npm  npx  yarn  yarnpkg

$ docker run --rm node:25-alpine sh -c 'ls /usr/local/bin'
docker-entrypoint.sh  node  nodejs  npm  npx  yarn  yarnpkg

タグを変えていなくても 10 月に渡る

2026-08-08 時点のタグの解決先です。

タグ実際の版corepackyarn
node:lts / node:24-alpinev24.19.0あるある
node:25-alpinev25.9.0無いある
node:26-alpine / node:latestv26.7.0無い無い

node:lts はまだ 24 系を指しています。Node の公式リリース予定表(nodejs/Release の schedule.json)では、26 が LTS になるのは 2026-10-28 の予定です。

前回の昇格では、lts タグは予定日に動きました。Docker 公式イメージのタグ定義(docker-library/official-images の library/node)を辿ると、2025-10-21 時点で lts-alpine は 22.21.0 に付いており、24 が LTS になった 2025-10-28 の更新で 24.11.0 へ移っています。同じことが起きれば、Dockerfile を 1 文字も編集していない CI が、その日に corepack と Yarn を同時に失います。

同じ表から、25 系の位置づけも決まります。

"v25": {"start":"2025-10-15","maintenance":"2026-04-01","end":"2026-06-01"}

Node 25 は 2026-06-01 で終了しています。 25 で踏んだ場合、corepack を入れ直すより 24 系(LTS)か 26 系へ移るほうが先です。

corepack と Yarn は、別々の場所から別々の版で消えた

Node 25 のイメージには Yarn 1.x の shim が残っていました。26 のイメージからは、これも外れています。

$ docker run --rm node:25-alpine sh -c 'yarn --version'
1.22.22

$ docker run --rm node:26-alpine sh -c 'yarn --version'
sh: yarn: not found

corepack と Yarn では、消えた場所が違います。corepack は Node の配布物から外れたもの、Yarn 1.x は Docker 公式イメージ側が同梱をやめたものです(nodejs/docker-node#2407「Prepare Yarn v1 removal in Node.js 26 images」。同 issue は TSC endorsed the removal of Yarn v1 for images based on Node.js 26 and above と書いています)。イメージを使う側から見ると、node:lts が 26 へ動く 10 月に両方が同時に効き始めます。

yarn しか使っていないプロジェクトでも、直し方は同じ形になります。

RUN npm install -g [email protected]

Node 25 では修正の 1 行が衝突する

npm install -g corepack@latest を Node 25 のイメージで実行すると、インストールの段で止まります。

$ npm install -g corepack@latest
npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: '[email protected]',
npm warn EBADENGINE   required: { node: '^22.22.2 || ^24.15.0 || >=26.0.0' },
npm warn EBADENGINE   current: { node: 'v25.9.0', npm: '11.12.1' }
npm warn EBADENGINE }
npm error code EEXIST
npm error path /usr/local/bin/yarn
npm error EEXIST: file already exists
npm error File exists: /usr/local/bin/yarn

corepack のパッケージは、corepack のほかに yarn / yarnpkg / pnpm / pnpx の shim を置きます。25 のイメージにはまだ Yarn 1.x の shim があるので、/usr/local/bin/yarn を取り合います。26 でこの 1 行が通るのは、Yarn の shim が先に消えていて、置く先が空いているからです。

24 系(今日の node:lts)では衝突しません。corepack が /usr/local/lib/node_modules/corepack に npm のパッケージとして入っているので、npm install -g corepack@latest はそれを更新する形になります。衝突するのは 25 だけ——corepack のパッケージだけが消えて、Yarn の shim が残った版です。

この機構の帰結として、26 で修正を当てた環境にも yarn コマンドが生えます(corepack の shim として)。叩くと corepack がレジストリから Yarn を取りに行きます。

回避は 2 つあり、どちらも pnpm --version まで到達します。どちらもイメージのビルド中に、そのイメージの中で実行する前提です(Dockerfile の RUN 行)。actions/setup-node などでランナーに入っている Node を使っている場合、/usr/local/bin/yarn はそのマシンに入っている Yarn の実体なので、同じコマンドを打たないでください。セルフホストのランナーなら、消えたぶんは次のジョブ以降も戻りません。

# 1. 先に Yarn 1.x の shim を外す(何が消えるかがコマンドに出る)
RUN rm -f /usr/local/bin/yarn /usr/local/bin/yarnpkg \
 && npm install -g corepack@latest && corepack enable

# 2. 上書きを許可する
RUN npm install -g --force corepack@latest && corepack enable

素の node:25 イメージで 2 を実行すると、上書きされるのは Yarn 1.x の shim(/usr/local/bin/yarn と yarnpkg)です。ただし --force は衝突したものを種類を問わず上書きします。この行より前に自分でグローバルインストールしているものがあれば、そちらも対象になります。上書き後に yarn を叩くと、corepack の shim が応答します。

$ yarn --version
This project is configured to use pnpm because /app/package.json has a "packageManager" field

packageManager に yarn を書いているプロジェクトでは、yarn を叩くと corepack がその版を解決します。ただし corepack はレジストリから取得するので、ネットワークを遮断したビルド段では実体が無い状態になります(イメージに焼かれていた Yarn 1.x は消えているため)。yarn を Yarn 1.x として別に使っている場合も、上書きされた側が消えます。

上の警告のとおり、corepack 0.35.0 は engines から Node 25 を外しています(0.34.3 から 0.34.7 は ^20.10.0 || ^22.11.0 || >=24.0.0 で、25 が入っていました)。npm は警告だけ出してインストールし、corepack enable も pnpm --version も通ります。ただし 25 は既に終了した系列なので、ここに時間を使うより 24 か 26 へ移すほうが短く済みます。

corepack を経由しない直し方

packageManager フィールドの解決を諦めて、パッケージマネージャを直接入れる手もあります。

RUN npm install -g [email protected]

版を書くときは、packageManager に合わせるだけでなく現行の保守版かどうかを見てください。pnpm 10 系の 10.19.0 には、公開済みの脆弱性勧告が複数あります(GHSA-qrv3-253h-g69c ほか。修正は 11.7.0 / 11.8.0 で入っています)。ここで 11.20.0 を書いているのはそのためです。

これは Node 25 でも 26 でも 1 行で通ります。代わりに、使う版の指定が package.json の packageManager と Dockerfile の 2 箇所に分かれます。片方だけ上げても誰も止めないので、上げ忘れると手元と CI で別の pnpm が動きます。packageManager を版の正本として使い続けるなら、corepack を入れる側を選んでください。

効かない直し方

npx から呼ぶ形は、終了コード 0 で成功したように見えて何も残りません。

$ npx -y corepack@latest enable
(rc=0 で終わる)
$ pnpm --version
sh: pnpm: not found

corepack enable は shim を作りますが、npx が corepack 自体を一時的な場所へ置くので、作られた shim も PATH に残りません。エラーを出さずに終わるので、CI のログでは成功した行に見えます。

切り分け

  • yarn: not found のほうが出ている:Node 26 のイメージです。corepack ではなく Docker 公式イメージ側から Yarn 1.x が外れています。npm install -g [email protected] か、corepack を入れて packageManager に解決させてください。
  • corepack enable は通るのに pnpm: not found になる:npx corepack で呼んでいます。上の「効かない直し方」を見てください。
  • npm error code EEXIST / path /usr/local/bin/yarn で止まる:Node 25 のイメージです。Yarn 1.x の shim と衝突しています。
  • Cannot find matching keyid が出る:corepack がパッケージマネージャを取得するときの署名検証で落ちています。packageManager に書いた版を新しくするか、その版を npm install -g で直接入れてください(この経路は実測していません)。
  • 手元では動くのに CI だけ落ちる:node -v を CI のログに出してください。手元が 24 系、CI が node:latest(26 系)という食い違いがよく残ります。
  • corepack は入ったが packageManager の版が取得できない:corepack はレジストリからパッケージマネージャを落とすので、ネットワークが遮断されたビルド段では失敗します。corepack enable ではなく、必要な版を含むイメージを用意してください。

検証環境

  • node:26.7.0-alpine、package.json に "packageManager": "[email protected]"
  • 再現:corepack enable && pnpm --version が sh: corepack: not found を出して終了コード 127(ネットワーク遮断のまま。レジストリに届かないことが理由ではありません)
  • 修正:同じイメージ・同じコマンドのまま npm install -g corepack@latest を先に走らせると終了コード 0

再現から修正までは errfix の検証ハーネスが機械的に確認しています。版の対照(24.19.0 に corepack 0.35.0 があり、25.0.0 / 25.9.0 / 26.7.0 では 127)、/usr/local/bin の中身、Yarn が 25 まで残り 26 で消えること、Node 25 で npm install -g corepack@latest が EEXIST になり 24 では通ること、24 にだけ /usr/local/lib/node_modules/corepack があること、--force と shim 削除の 2 つの回避がどちらも pnpm --version を通すこと、--force の後に yarn を叩くと corepack の shim が応答すること、26 で修正を当てると yarn / pnpm の shim が生えること、npx -y corepack@latest enable が終了コード 0 のまま pnpm を残さないこと、npm install -g [email protected] が単独で通ることは、いずれも同じ手順で実測しています。

配布から外れた経緯は Node 25.0.0 のリリースノートと nodejs/TSC#1697 の開票結果、LTS の予定日は nodejs/Release の schedule.json、corepack の engines は npm レジストリのメタデータ、pnpm の勧告は GitHub Advisory Database によります。lts タグが前回の昇格日に 22 から 24 へ動いたことは docker-library/official-images のコミット履歴で確認しました。

2026-10-28 に lts が 26 へ動くかどうかは、前回と同じことが起きるという予測です(予定日そのものは一次情報にありますが、タグが動く保証ではありません)。

Cannot find matching keyid は実測していません(切り分け節の該当項目はそう明記しています)。Yarn 1.x がイメージから外れた経緯は nodejs/docker-node#2407 の記述によります。

検証(machine-verified)

この修正は node:26.7.0-alpine のバージョン固定コンテナ内で再現し、修正後に corepack: not found のシグネチャが消えることを機械で確認しています。

verify — run-case.mjs
$ node run-case.mjs node/corepack-command-not-found
● reproduce corepack: not found present ✓
● apply fix exit 0
● re-run corepack: not found gone ✓
PASS verified · node:26.7.0-alpine · signature gone

確認したのは上のイメージの中だけです。別の環境で直らなかった、記述が違う、という場合は 報告してください(対象と検証イメージは件名・本文に入ります)。