如何使用Docker(Docker Compose)运行Nuxt3

3
我想在Docker容器中运行nuxt3(使用docker compose)。
我的Dockerfile看起来像这样:
FROM node:18.17.1-bullseye as build-stage

WORKDIR /app
COPY . .
RUN yarn install
RUN yarn build

FROM node:18.17.1-bullseye as production-stage
RUN mkdir /app
COPY --from=build-stage /app/.output /app/.output



ENTRYPOINT ["node", ".output/server/index.mjs"]

当我启动容器时,它会以这个错误退出:
node:internal/modules/cjs/loader:1080
   throw err;
   ^
 
 Error: Cannot find module '/app/.output/server/index.mjs'
     at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
     at Module._load (node:internal/modules/cjs/loader:922:27)
     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
     at node:internal/main/run_main_module:23:47 {
   code: 'MODULE_NOT_FOUND',
   requireStack: []
 }
 
 Node.js v18.17.1
 exited with code 0

对我来说,看起来似乎没有 .output 文件夹。但我不明白为什么以及如何调试这个问题。

EDIT: #docker-compose.yaml

version: '3'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - HOST=0.0.0.0

#production.yaml

version: '3.8'

services:
  web:
    restart: always
    volumes: []

你是对的。当我从我的docker-compose.yaml文件中删除卷时,它可以正常工作。 我使用以下命令启动我的应用程序:
docker compose -f docker-compose.yaml -f production.yaml up --build

为什么production.yaml没有覆盖docker-compose的volume条目?

你能分享一下你的docker-compose.yaml文件吗?这个错误可能与卷覆盖了node_modules文件夹有关。 - undefined
1
@yahyasghayron 是的,你说得对,这可能是由于覆盖造成的,但我们需要 docker-compose 文件来进行验证。 - undefined
我删除了卷区域,现在它可以正常工作了。我该如何在我的生产文件中覆盖/停用卷功能? - undefined
1个回答

2
你遇到的问题与Docker Compose中卷的管理方式有关。当你使用多个Compose文件并使用-f标志时,你指定它们的顺序很重要。后面的Compose文件中的设置会覆盖前面的文件中的设置。然而,默认情况下,当你使用额外的Compose文件时,docker-compose.yaml文件中定义的卷不会被覆盖。相反,多个Compose文件中定义的卷会被合并。
在你的情况下,你在docker-compose.yaml和production.yaml中都定义了卷。由于你使用了-f docker-compose.yaml -f production.yaml,两个文件中的卷被合并了。这就是为什么你看到的问题是docker-compose.yaml中的卷没有被production.yaml中空卷的定义覆盖。
通过从production.yaml中删除卷部分,你可以确保在开发中使用docker-compose.yaml中定义的卷,并且它不会被覆盖。

1
尝试将docker-compose.yaml重命名为类似于docker compose -f compose.yml -f production.yml up -d - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接