M1 Mac で Docker のビルドエラー fatal error: vips/vips8 への対処方法
M1 Mac ( Apple Silicon )で Node.js を使う Docker イメージのビルドで次のようなエラーが出るときの対処方法についてです。
サンプル 1:
../src/common.cc:24:22: fatal error: vips/vips8: そのようなファイルやディレクトリはありません#include <vips/vips8>^compilation terminated.sharp.target.mk:137: ターゲット 'Release/obj.target/sharp/src/common.o' のレシピで失敗しましたmake: ディレクトリ '/node_modules/sharp/build' から出ますmake: *** [Release/obj.target/sharp/src/common.o] エラー 1
サンプル 2:
npm verb stack Error: command failednpm verb stack at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27)npm verb stack at ChildProcess.emit (node:events:390:28)npm verb stack at maybeClose (node:internal/child_process:1064:16)npm verb stack at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5)npm verb pkgid sharp@0.29.3npm verb cwd /appnpm verb Linux 5.10.76-linuxkitnpm verb argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "--verbose"npm verb node v16.13.1npm verb npm v8.2.0npm ERR! code 1npm ERR! path /app/node_modules/sharpnpm ERR! command failednpm ERR! command sh -c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)npm ERR! sharp: Please see https://sharp.pixelplumbing.com/install for required dependenciesnpm ERR! sharp: Installation error: Use with glibc 2.28 requires manual installation of libvips >= 8.11.3npm verb exit 1
私は Node.js の NPM パッケージ sharp
を使うプロジェクトでこのエラーに遭遇しました。
具体的 にはベースイメージとして node:16
と node:14
を使用した場合にこの問題が発生しました。
記事執筆時点で node:16
は buster
を、 node:14
は stretch
をベースとしています。
❯ docker run --rm node:16 cat /etc/os-releasePRETTY_NAME="Debian GNU/Linux 10 (buster)"NAME="Debian GNU/Linux"VERSION_ID="10"VERSION="10 (buster)"VERSION_CODENAME=busterID=debianHOME_URL="https://www.debian.org/"SUPPORT_URL="https://www.debian.org/support"BUG_REPORT_URL="https://bugs.debian.org/"
❯ docker run --rm node:14 cat /etc/os-releasePRETTY_NAME="Debian GNU/Linux 9 (stretch)"NAME="Debian GNU/Linux"VERSION_ID="9"VERSION="9 (stretch)"VERSION_CODENAME=stretchID=debianHOME_URL="https://www.debian.org/"SUPPORT_URL="https://www.debian.org/support"BUG_REPORT_URL="https://bugs.debian.org/"
ちなみに、ホスト側の macOS の環境は次のとおりです:
❯ sw_versProductName: macOSProductVersion: 12.1BuildVersion: 21C52
ウェブ上で検索するといくつかの解決策が提案されています。 私が目にした範囲では次の 3 つの方法 が有効なようでした。
- A)
bullseye
ベースのイメージを使う - B) イメージのプラットフォームを変更する
- C)
vips
(libvips
)をインストールする
A) bullseye
ベースのイメージを使う
記事執筆時点では bullseye
ベースのイメージだ と問題ありませんでした。
FROM node:16-bullseye
FROM node:14-bullseye
B) イメージのプラットフォームを変更する
FROM
のオプション --platform
でプラットフォームを変更します。
FROM --platform=linux/amd64 node:16
FROM --platform=linux/amd64 node:14
C) vips
( libvips
)をインストールする
Homebrew が利用できる場合は次のコマンドで vips
をインストールできます。
RUN brew reinstall vips
apt-get
が利用できる場合は次のコマンドが libvips
をインストールできます。
RUN apt-get update -y && \apt-get upgrade -y libvips libvips-dev
参考: Can't compile under Apple Silicon M1 arm64 · Issue #2460 · lovell/sharp · GitHub
これらの中から状況に合っ た方法を選ぶとよいかと思います。 私は A) の方法を選びました。