Nuxt 构建因 docker 容器内的权限错误而失败

Nuxt build fails with permission error inside docker container

我正在尝试通过关注 this guide 来 docker 化我的 Nuxt 应用程序。如果我输入写在那里的命令它会起作用,但我想使用 docker-compose 来简化它。我还在学习 docker。

到目前为止,我已经创建了一个 docker-compose.yml 文件

version: '3'

services:
  nuxt-app:
    container_name: nuxt-app
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - '.:/app'
      - '/app/node_modules'
    ports:
      - '3000:3000'

但是当我 运行 docker-compose up 时,它显示了这个错误

[+] Running 2/2
⠿ Network nuxt-app_default  Created 0.7s
⠿ Container nuxt-app        Created 30.3s

Attaching to nuxt-app
nuxt-app  | yarn run v1.22.17
nuxt-app  | $ nuxt start
nuxt-app  |
nuxt-app  |  FATAL  No build files found in /app/.nuxt/dist/server.
nuxt-app  | Use either `nuxt build` or `builder.build()` or start nuxt in development mode.
nuxt-app  |
nuxt-app  |   Use either `nuxt build` or `builder.build()` or start nuxt in development mode.
nuxt-app  |   at VueRenderer._ready (node_modules/@nuxt/vue-renderer/dist/vue-renderer.js:758:13)
nuxt-app  |   at async Server.ready (node_modules/@nuxt/server/dist/server.js:637:5)
nuxt-app  |   at async Nuxt._init (node_modules/@nuxt/core/dist/core.js:482:7)
nuxt-app  |
nuxt-app  |
nuxt-app  |
╭──────────────────────────────────────────────────────────────────────────────╮
│                                                                              │
│   ✖ Nuxt Fatal Error                                                         │
│                                                                              │
│   Error: No build files found in /app/.nuxt/dist/server.                     │
│   Use either `nuxt build` or `builder.build()` or start nuxt in              │
│   development mode.                                                          │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯
nuxt-app  |
nuxt-app  | error Command failed with exit code 1.
nuxt-app  | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
nuxt-app exited with code 1

我的Dockerfile看起来像这样

FROM node:lts as builder

WORKDIR /app

COPY . .

RUN yarn install \
  --prefer-offline \
  --frozen-lockfile \
  --non-interactive \
  --production=false

RUN yarn build

RUN rm -rf node_modules && \
  NODE_ENV=production yarn install \
  --prefer-offline \
  --pure-lockfile \
  --non-interactive \
  --production=true

FROM node:lts

WORKDIR /app

COPY --from=builder /app  .

ENV HOST 0.0.0.0
EXPOSE 80

CMD [ "yarn", "start" ]

有人能告诉我为什么会这样吗?我怎样才能让它起作用?

更新

如果我在 docker-compose up

之前执行 yarn build,问题似乎可以解决

volumes: 安装隐藏了 Dockerfile 所做的一切。在构建应用程序并围绕它创建一个最小图像之后,您可以挂载您的主机目录并使所有这些目录不可见。这也是 运行 yarn build 在本地似乎有帮助的原因:它会在将 Dockerfile 安装到容器之前重新创建您的 Dockerfile 在主机上构建的目录。

您可以将 docker-compose.yml 减少到

version: '3.8'
services:
  nuxt-app:
    build: .
    ports:
      - '3000:3000'

没有 volumes: 并且没有覆盖 container_name: Compose 提供的内容,并使用更短的 build: 形式,因为否则您将使用默认选项。