発生状況
Windows利用者が作成したdockerfileをMacユーザーが利用したところ、エラーが発生した。
原因と解決法
自分はWindowsしか利用したことがないため、
=> ERROR [web 11/12] RUN npm install 0.1s
------
> [web 11/12] RUN npm install:
0.112 rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
0.112
------
failed to solve: process "/bin/sh -c npm install" did not complete successfully: exit code: 133
これが何原因か特定まで時間がかかってしまった。
原因は、
RUN curl -fsSL https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz | tar -xJ -C /usr/local --strip-components=1 --no-same-owner
linux-x64.tar.xz
であった。要は、x86系用を引っ張ってきてしまったため、arm64系では動かない問題であった、、
linux-arm64
に変更することで、Dockerの乗っている環境で正しく動作するバイナリをとってくることが可能である。
しかし、これは環境に依存してしまうため、Bestな方法としては次の通りである。
RUN yum -y install nodejs
単純に、yum or dnfでinstallしてやればCPUに合わせたものを引っ張ってきてくれる。
感想
Amazon Linuxではこれまで、
このような感じで、いつもインストールしていたため、個別に入れる場合は別にyum
やdnf
でよいと知り驚いた、、、
バイナリで引っ張る必要があるという先入観が解決までの道筋を邪魔していた、、
また、ほかのインストールにも応用が利く内容だと思うので、今後の参考にしていきたいと思う。