为啥使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载?
Posted
技术标签:
【中文标题】为啥使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载?【英文标题】:Why NextJS using Docker container did not reload after changed code for dev environment?为什么使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载? 【发布时间】:2019-06-05 05:08:53 【问题描述】:我正在尝试使用 Dockerfile 在 Docker 容器上运行 NextJS,并通过 docker-compose 运行,在我更改了 JS 文件(例如 index.js)中的代码后,Next 服务器没有重新加载。
但是当我尝试在不使用 Docker 的情况下在外面运行时(通过直接执行“npm run dev”命令),Next 服务器确实重新加载顺利。
我也尝试通过“nodemon”命令(在容器内)运行服务器,它也没有成功。
Dockerfile:
FROM node:10.14.2-alpine
COPY . /home/next_app
WORKDIR /home/next_app
RUN npm install
docker-compose.yml:
version: "3.6"
services:
self_nextjs:
container_name: self_nextjs
build:
context: ./app
dockerfile: Dockerfile
ports:
- 3000:3000
volumes:
- ./app:/home/next_app
- /home/next_app/node_modules
networks:
- zen_frontend
restart: always
command: npm run dev
networks:
zen_frontend:
name: zen_frontend
driver: bridge
任何建议将不胜感激。
【问题讨论】:
【参考方案1】:你有没有通过暴露 webpack 默认热重载端口进行测试?
添加到您的Dockerfile
...
EXPOSE 49153
...
并更新您的docker-compose.yml
version: "3.6"
services:
self_nextjs:
container_name: self_nextjs
build:
context: ./app
dockerfile: Dockerfile
ports:
- 3000:3000
- 49153:49153
volumes:
- ./app:/home/next_app
- /home/next_app/node_modules
networks:
- zen_frontend
restart: always
command: npm run dev
networks:
zen_frontend:
name: zen_frontend
driver: bridge
希望对您有所帮助,
问候
【讨论】:
它对我不起作用。我认为这是 nextjs github.com/zeit/next.js/pull/823 中的一个错误【参考方案2】:我在 Windows 10 上遇到了同样的问题。我按照此线程 https://github.com/zeit/next.js/issues/6417 中的一些说明进行操作。基本上,您必须添加一个next.config.js
来轮询更改。我不确定 MacOS 是否有同样的问题。
module.exports =
webpackDevMiddleware: config =>
config.watchOptions =
poll: 800,
aggregateTimeout: 300,
return config
,
【讨论】:
这是我苦苦挣扎几天后找到的最佳解决方案,谢谢!以上是关于为啥使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载?的主要内容,如果未能解决你的问题,请参考以下文章