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 的提示,我做了以下操作:
- cd 到
web
目录
- 从 docker 文件构建图像
docker build .
- 使用以下命令探索图像
docker run --rm -it --entrypoint=/bin/bash name-of-image
- 进入后,执行
ls
或ls -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
中删除了所有容器、图像和卷。但它仍然有效。尝试了很多方法来重现错误,但我做不到。感谢大家的帮助,希望这可能会被其他人使用!
目标
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 的提示,我做了以下操作:
- cd 到
web
目录 - 从 docker 文件构建图像
docker build .
- 使用以下命令探索图像
docker run --rm -it --entrypoint=/bin/bash name-of-image
- 进入后,执行
ls
或ls -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
中删除了所有容器、图像和卷。但它仍然有效。尝试了很多方法来重现错误,但我做不到。感谢大家的帮助,希望这可能会被其他人使用!