NextJS Docker error: Couldn't find a `pages` directory. Please create one under the project root

NextJS Docker error: Couldn't find a `pages` directory. Please create one under the project root

目标

Docker启动 NextJS 应用程序


问题

Docker compose up 产生以下错误:找不到 pages 目录。请在项目根目录下创建一个。


申请

文件和文件夹

docker-compose.yml
web
   .next
   pages
   public
   .dockerignore
   dockerfile
   [more nextjs files & folders here]

docker-撰写

version: '3'

services:
  web:
    build:
      context: web
      dockerfile: dockerfile
    ports:
      - "3000:3000"
    container_name: rughood_web

docker文件

FROM node:16

WORKDIR /web

COPY package*.json .

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "run", "dev"]

.docker忽略

Dockerfile
.dockerignore
node_modules
npm-debug.log
README.md
.git

注意!

当我在 web 目录中 运行 npm run dev(调用 package.json 中的脚本 "dev": "next dev")时,NextJS 应用程序本身工作正常。我只有在尝试 dockerize 时才会出错。此外,在 docker-compose 中,我还启动了一个 Redis 缓存,它也工作正常。因此我得出结论,错误一定是我尝试结合 Docker 和 NextJS 的方式。非常感谢您:)


更新 1

我是怎么到那里的
使用@HansKilian 和 Exploring Docker container's file system 的提示,我做了以下操作:

  1. cd 到 web 目录
  2. 从 docker 文件构建图像 docker build .
  3. 使用以下命令探索图像 docker run --rm -it --entrypoint=/bin/bash name-of-image
  4. 进入后,执行lsls -lsa
    这给了我以下结果:

派生图像中有什么

dockerfile
next-env.d.ts
next.config.js
node_modules
package-lock.json
package.json
pages
public
tsconfig.json
[Among other files/folders]

所以 pages 文件夹实际上似乎在容器的根目录中,但我仍然收到错误(pages 是容器中的一个目录,我可以在其中 cd-ls)

P.s。如果您不再使用图片,请不要忘记删除它


更新 2

构建图像并从 web 目录中 运行 安装它确实有效,所以它实际上可能与 docker-compose?

这是我使用 nextjs 工作的 Dockerfile:

FROM node:16.14.0

RUN npm install -g npm@8.5.5

RUN mkdir -p /app

WORKDIR /app

COPY package*.json /app

RUN npm i

COPY . /app

EXPOSE 3000

RUN npm run build

CMD ["npm", "run", "dev"]

和docker-compose.yml :

version: "3.7"

services:
  project-name:
    image: project-name
    build:
      context: .
      dockerfile: Dockerfile
    container_name: project-name
    restart: always
    volumes:
      - ./:/app
      - /app/node_modules
      - /app/.next
    ports:
      - "3000:3000"

当我尝试上传到互联网的每一行代码时,我回到了最初的 set-up(来自问题),突然它现在可以工作了。确认我没有更改任何内容的源代码管理。

可以肯定的是,我从 Docker 和 运行 docker compose up 中删除了所有容器、图像和卷。但它仍然有效。尝试了很多方法来重现错误,但我做不到。感谢大家的帮助,希望这可能会被其他人使用!