はじめに
DockerでNext.jsを使ってウェブページを作ろうとしたけど、npx create-next-app {name}
の段階でglob error
っていうワケワカランのが発生した。テンションが下がった。
環境
- Linux (KDE neon based on Ubuntu)
- Docker version 20.10.12
- image node:17.3-alpine
問題
# コマンドをうちこむ
docker-compose run --rm node npx create-next-app nextjs-tutorial
Creating nextjs-tutorial_node_run ... done
Creating a new Next.js app in /usr/src/app/nextjs-tutorial.
Using npm.
Installing dependencies:
- react
- react-dom
- next
#エラー❗❗❗なにこれ。
glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
errno: -13,
code: 'EACCES',
syscall: 'scandir',
path: '/root/.npm/_logs'
}
とりあえず権限が無いということはわかった。permission denied
とか出たときは大方ファイル権限かユーザー管理あたりが原因。
原因
DockerFileにUSER node
の指定がないことが原因だった。これが何を意味するんだろうか?
コマンドをrootで実行しなくなるということだから、とりあえずセキュリティリスクが低下することはなんとなくわかる。
とりあえず、参考したページでUSER node
の指定をしろと書いてあったのでそうする。
解決策
DockerFileにUSERの指定を追記したら解決するらしい。
FROM node:17.3-alpine
WORKDIR /usr/src/app
USER node
こうすると、このイメージで作成されたコンテナは実行ユーザーがnodeになる。
あるいは、WORKDIR
を/home/
にしたらいいっぽい。
FROM node:17.3-alpine
WORKDIR /home/node/app
やっぱりrootが絡むとよくないんだろうか。
理屈はわからんけどとりあえずヨシ!
おわりに
理屈はまだ理解してないけれど、とりあえずこれを書いてるのが深夜3時過ぎで、このあと午前10時から予定があるので、理解は後回しにしようと思います。
誰かわかるよって人いたら教えてほしいです。よろしくおねがいします。
参考