NextJs应用程序代码更改不会反映在Docker容器中

g6ll5ycj  于 2023-05-22  发布在  Docker
关注(0)|答案(1)|浏览(291)

我有一个dockerized的NextJS应用程序。在我的本地机器上,我在我的主机和docker容器之间使用卷Map,这样对代码的更改,特别是静态html页面的更改,会立即反映出来。

version: '3'
services:
  next-ui:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 3000:3000
    volumes:
      - ./next-ui:/next-ui
      - next_ui_node_modules:/next-ui/node_modules
    environment:
      - NODE_ENV=production
volumes:
  next_ui_node_modules:

然而,在交错的机器上,我使用一个命名的卷,而不是几个论坛的建议;

version: '3'
services:
  next-ui:
    build:
      context: ./next-ui
      dockerfile: Dockerfile
    volumes:
      - next_ui_node_modules:/next-ui/node_modules
      - next_ui_next_assets:/next-ui/.next
volumes:
  next_ui_node_modules:
  next_ui_next_assets:

我的挑战是,在构建nextjs应用程序容器时,对我的静态页面所做的css或html没有反映出来。我必须先删除容器,然后再删除命名卷,然后才能重新构建容器,并在每次更改代码时启动它,即使它只是一行代码。我觉得这是非常低效的。
我知道在每个构建过程中,命名卷的内容都会不断替换容器的.next目录的内容。
是否有解决此问题的方法?

bhmjp9jg

bhmjp9jg1#

删除所有volumes:块。你根本不需要他们

version: '3.8'
services:
  next-ui:
    build: ./next-ui
    ports:
      - '3000:3000'

假设你有一个USB拇指驱动器。打个比方,volumes:所做的就是插入拇指驱动器,并在运行应用程序之前将其挂载到应用程序的源代码上。这意味着,如果您更改了应用程序代码,您还需要更改卷内容;正如你所注意到的,这是低效的。
Docker具有将数据从镜像复制到卷的功能,但 * 仅 * 用于Docker命名的卷,并且 * 仅 * 第一次使用卷。绑定挂载、Kubernetes卷或更新镜像时,不会复制任何内容。我建议避免使用此功能,因为您在此问题中描述的情况类似。

相关问题