我有一个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目录的内容。
是否有解决此问题的方法?
1条答案
按热度按时间bhmjp9jg1#
删除所有
volumes:
块。你根本不需要他们假设你有一个USB拇指驱动器。打个比方,
volumes:
所做的就是插入拇指驱动器,并在运行应用程序之前将其挂载到应用程序的源代码上。这意味着,如果您更改了应用程序代码,您还需要更改卷内容;正如你所注意到的,这是低效的。Docker具有将数据从镜像复制到卷的功能,但 * 仅 * 用于Docker命名的卷,并且 * 仅 * 第一次使用卷。绑定挂载、Kubernetes卷或更新镜像时,不会复制任何内容。我建议避免使用此功能,因为您在此问题中描述的情况类似。