我正在尝试使用Docker compose设置一个运行next.js应用程序的Docker容器,以便它可以与其他容器一起使用沿着(例如API或其他服务),我需要的是,在源代码更新后,next.js应用程序可以在真实的时间内编译任何更改。因此,我在主机上为Map到源代码的容器创建了一个卷。问题是容器上的应用程序在源代码上应用了一些更改后不会更新,容器实际上更新了文件(卷被正确Map),但应用程序不会应用更改,也不会再次编译。docker compose的输出控制台是这样的,说@next/swc-linux-x64没有安装:
x1c 0d1x的数据
我认为图像存在一些问题,因为当我在本地机器上运行npm run dev
时,它不会显示警告,并且运行良好(在源代码中进行一些更改后,应用程序会更新并编译更改):
的
所以问题是:是否可以使用Docker为next.js应用程序创建一个开发容器?并且在对主机上的源代码进行更改后,它将能够更新/编译?应用程序不更新源代码中的任何更改可能是什么问题?
我的主机操作系统是Windows 11。节点版本:18.14.0
我的项目结构是:
型
我使用的文件如下:Dockerfile.dev
:
FROM node:18.14.0
WORKDIR /app
COPY package.json ./
RUN npm install
COPY /public .
COPY /src .
EXPOSE 3000
ENV NODE_ENV=development
CMD ["npm", "run", "dev"]
字符串docker-compose.dev.yml
:
services:
frontend:
environment:
NODE_ENV: development
container_name: frontend
build:
context: ./frontend
dockerfile: Dockerfile.dev
restart: always
ports:
- 3000:3000
volumes:
- ./frontend:/app
command: npm run dev
networks:
- my_network
networks:
my_network:
型next.config.js
:
/**
* @type {import('next').NextConfig}
*/
module.exports = {
output: process.env.NODE_ENV === 'production' ? 'standalone' : 'module',
};
型package.json
个
{
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},
"dependencies": {
"@popperjs/core": "^2.11.6",
"bootstrap": "^5.2.1",
"date-fns": "^2.29.2",
"eslint-config-next": "^13.1.6",
"gray-matter": "^4.0.3",
"next": "^13.1.6",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"remark": "^14.0.2",
"remark-html": "^15.0.1"
}
}
型
1条答案
按热度按时间pieyvz9o1#
尝试不同的堆栈
对于故障排除,您可以尝试不同的映像和运行时,例如,
bun
而不是node
。下面是我如何使用它与BunJS:Dockerfile
个字符串
docker-compose.yml
个型
还能看到问题吗?
如果你仍然看到这个问题,那么它不是你使用的图像,也不是Node。
最有可能的是,这是你的主机操作系统设置(例如文件监视器的最大限制)或你的NextJS设置(例如自定义代码设置中断热重载)。
尝试增加文件监视器
您也可以尝试增加文件监视器的限制。
1.在您的主机中,打开sysctl文件:
型
1.添加此行
型
1.应用更改:
型
您必须在主机上执行此操作,因为主机限制了观察者的容器数量。
改为在容器上设置
但是,如果您想在容器上执行此操作,则必须使用管理员权限运行它。
请注意,如果您的容器包含恶意代码,这可能会带来安全风险。
1.将这一行添加到
Dockerfile
型
1.以特权运行
型
docker-compose.yml
:型