我有一个项目,其中Flask作为后端,而VueJS作为前端。希望将所有内容放入将在生产服务器上运行的容器中。
我需要安装所有依赖项(npm install
并从vue(npm run build
)构建我的静态文件,以获取 dist 文件夹(包含HTML文件和资产),然后构建Flask项目:安装python,依赖项并在gunicorn上运行服务器。之后,将我的 dist 文件夹复制到Flask目录。
我了解了多阶段并尝试将其组合在一起,这是我的Dockerfile代码:
FROM python:3.7-alpine as backend-builder
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
FROM node:lts-alpine as build-stage
RUN cd ..
RUN ls
RUN mkdir /frontend
WORKDIR /frontend
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM busybox
COPY --from=build-stage /frontend/dist /app/dist
RUN ls
正在执行,但请勿将 dist 复制到Flask目录
我的项目结构是:
project_folder
- app (python + flask files)
-- app.py
-- wsgi.py
-- requirements.txt
-- etc
- frontend (vuejs files, packages)
-- public
-- src
-- package.json
-- etc
- Dockerfile
我做错了什么?如何编写Dockerfile,解决我的问题?
答案 0 :(得分:0)
FROM busybox
行创建了一个新图像,它没有引用python图像。只需在构建python之前先构建js,以便在python构建完成后就可以复制文件。
FROM node:lts-alpine as build-stage
RUN cd ..
RUN ls
RUN mkdir /frontend
WORKDIR /frontend
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM python:3.7-alpine as backend-builder
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
COPY --from=build-stage /frontend/dist /app/dist