为什么使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载?

Dis*_*uan 5 node.js docker reactjs docker-compose next.js

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激。

dav*_*ark 6

我在 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
  },
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我必须稍微改变@davidatthepark 解决方案才能让它为我工作。看起来webpackDevMiddleware不再支持了。

module.exports = {
  webpack: (config, _) => ({
    ...config,
    watchOptions: {
      ...config.watchOptions,
      poll: 800,
      aggregateTimeout: 300,
    },
  }),
}
Run Code Online (Sandbox Code Playgroud)


mas*_*ino 3

您是否通过公开 webpack 默认热重载端口进行了测试?

添加到您的Dockerfile

...
EXPOSE 49153
...
Run Code Online (Sandbox Code Playgroud)

并更新您的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
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,

问候