当容器中 运行 时,创建下一个应用程序失败

create-next-app fails when run in container

我想在主机上的当前目录中创建一个新的 nextjs 应用程序,但不安装节点等。所以我 运行 一个像这样的容器

docker run --rm -it -v $(pwd):/app node:17.8.0 bash

whoami 显示我在容器中是 root。然后我运行容器里的这些命令

cd /app
npx create-next-app@latest

并得到这个输出

Need to install the following packages:
  create-next-app@latest
Ok to proceed? (y) y
sh: 1: create-next-app: Permission denied
npm notice
npm notice New minor version of npm available! 8.5.5 -> 8.6.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.6.0
npm notice Run npm install -g npm@8.6.0 to update!
npm notice

我不明白为什么我的权限被拒绝,因为我是 root。

跟host目录的volume mapping有关系,因为如果我运行没有volume mapping的container,命令就可以了

主机目录中的权限如下所示

drwxrwxr-x  2 hans hans 4096 Apr  9 10:35 .
drwxrwxr-x 11 hans hans 4096 Apr  9 10:21 ..

为什么它会失败,我怎样才能让它工作?

我的建议是 运行 立即使用正确的 UID/GID 容器,这样您以后就不必修复权限。这也可能解决最初的问题。

docker run -u "$(id -u):$(id -g)" ...