在docker编写之前重新编译VueJS应用程序

在docker编写之前重新编译VueJS应用程序,docker,vue.js,docker-compose,Docker,Vue.js,Docker Compose,我想在docker nginx容器内部署vueJS应用程序,但在该容器运行之前,必须通过npm run build编译vueJS源代码,以便在容器中运行,然后退出,只留下nginx容器的编译结果 每次运行docker compose up时,都必须重新编译vueJS应用程序,因为主机操作系统上有一个.env文件必须卷装,并且此处的变量可能会更新 我认为理想的方法是为docker compose创建阶段,比如gitlab ci,这样就有了一个构建阶段,完成之后,nginx容器就会启动。但是当我查这

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

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

我认为理想的方法是为docker compose创建阶段,比如gitlab ci,这样就有了一个构建阶段,完成之后,nginx容器就会启动。但是当我查这个的时候,我找不到一个方法


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

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

例如,此合成文件使用容器生成文件(而不是预构建映像)定义服务:

version: '3'
services:
  vueapp:
    build: ./my_app  # There should be a Dockerfile in this directory
这意味着我可以分别构建容器和运行服务:

docker-compose build
docker-compose up
或者,我可以使用运行前生成选项:

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

如果您的代码> .ev文件更改(并且容器没有重新启动更改),您可以考虑在容器构建文件中定义它们。否则,考虑将<代码> .Env>代码>文件放入目录(并安装目录,而不是文件,因为一些编辑器将使用交换文件并更改iNoDE,这会破坏安装)。如果装载目录并更改目录中的文件,更改将反映在容器中,因为父目录的inode没有更改。

我最终拥有一个从卷装载读取文件的nginx容器和一个构建应用程序并将文件放置在同一卷装载中的容器。当应用程序正在编译时,nginx读取旧版本,编译完成后,文件将被替换为新文件。

使用
env_文件:.env
是否存在与交换文件相同的问题?不,但我不确定
docker compose
是否确实监视它们的更改。但是,如果容器是通过其他过程重新创建的(例如,如果它的容器图像被重建),那么它无论如何都不会有问题,因为新的
.env
文件将始终被使用。编辑:我测试了这一点,
docker compose
确实注意到了
.env
文件的更改。所以,不-交换文件不会有问题。