LoginSignup
2

More than 1 year has passed since last update.

posted at

Node.js on Dockerでエラー発生(Error: EACCES: permission denied, errno: -13)

はじめに

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の指定を追記したら解決するらしい。

DockerFile
FROM node:17.3-alpine
WORKDIR /usr/src/app

USER node

こうすると、このイメージで作成されたコンテナは実行ユーザーがnodeになる。
あるいは、WORKDIR/home/にしたらいいっぽい。

DockerFile
FROM node:17.3-alpine
WORKDIR /home/node/app

やっぱりrootが絡むとよくないんだろうか。
理屈はわからんけどとりあえずヨシ!

おわりに

理屈はまだ理解してないけれど、とりあえずこれを書いてるのが深夜3時過ぎで、このあと午前10時から予定があるので、理解は後回しにしようと思います。
誰かわかるよって人いたら教えてほしいです。よろしくおねがいします。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2