首页 > 解决方案 > 在 docker-compose up 之前重新编译 VueJS 应用程序

问题描述

我想在 docker nginx 容器中部署 vueJS 应用程序,但在该容器运行之前,vueJS 源必须通过npm run build我想编译以在容器中运行然后退出,只为 nginx 容器留下编译结果。

每次docker-compose up运行时,都必须重新编译 vueJS 应用程序,因为主机操作系统上有一个 .env 文件必须进行卷挂载,并且可以更新此处的变量。

我认为理想的方法是像在 gitlab ci 中那样为 docker compose 创建阶段,这样就会有一个构建阶段,当它完成时,nginx 容器就会启动。但是当我查看这个时,我看不到这样做的方法。

每次docker-compose up运行时编译我的 vueJS 应用程序的最佳方法是什么?

标签: dockervue.jsdocker-compose

解决方案


如果您已经将 Vue.js 应用程序构建到容器中(使用 Dockerfile),则可以使用文件中的build指令docker-compose.yml。这样,您可以docker-compose build手动创建容器,或run --build在容器启动之前构建容器。

例如,这个 Compose 文件使用容器构建文件而不是预构建的镜像来定义服务:

version: '3'
services:
  vueapp:
    build: ./my_app  # There should be a Dockerfile in this directory

这意味着我可以分别构建容器和运行服务:

docker-compose build
docker-compose up

或者,我可以使用 build-before-run 选项:

# Build containers, and recreate if necessary (build cache will be used)
docker-compose up --build

如果您的.env文件发生更改(并且容器在重新启动时不会接收更改),您可能会考虑在容器构建文件中定义它们。否则,请考虑将.env文件放入目录(并挂载目录,而不是文件,因为某些编辑器将使用交换文件并更改 inode - 这会破坏挂载)。如果挂载目录并更改目录中的文件,更改将反映在容器中,因为父目录的 inode 没有更改。


推荐阅读