首页 > 解决方案 > 使用 gitlab-runner 和 docker 部署

问题描述

我正在尝试部署 nodejs 应用程序并使用本教程,所以我.gitlab-ci.yml的看起来像

image: docker
services:
  - docker:dind
stages:
  - deploy
step-deploy-prod:
  stage: deploy
  script:
    - docker build -t app/vue-demo .
    - docker run -d -p 80:80 --rm --name todoapp app/vue-demo

和 Dockerfile 看起来像

FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

这个配置工作正常,部署后 docker 容器仍然存在,但对于我的应用程序,我需要启动npm run start命令,所以我更改了 Dockerfile

FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM node:lts-alpine as production-stage
EXPOSE 80
CMD ["npm", "run", "start;"]

工作已通过,但部署后 docker conatiner 已关闭我做错了什么?

标签: node.jsdockernginxdeploymentgitlab-ci-runner

解决方案


在您的第二阶段,除非您专门复制它们,否则没有文件。在您的场景中,您甚至不需要 2 个构建阶段。这应该有效:

FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

CMD ["npm", "run", "start"]

推荐阅读