node.js - 使用 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 已关闭我做错了什么?
解决方案
在您的第二阶段,除非您专门复制它们,否则没有文件。在您的场景中,您甚至不需要 2 个构建阶段。这应该有效:
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
推荐阅读
- ansible - 从 python 模块访问剧本变量
- jquery - 使用jquery将值设置为特定td后如何从更新的表行中获取数据
- angular - 错误:类型“字符串”不可分配给类型“订阅”。我怎样才能转换/解析这个?
- ios - 在目标之间传递数据和变量
- reactjs - 如何在 React 中使用 setIntervale 测试 UseEffect?
- r - 如何避免 R 中的循环功能?
- firebase - Flutter Firebase Auth - 捕获过期令牌
- matlab - 使用 MATLAB 对基于相机的图像进行 OMR
- python - Django 表单 - 将布尔字段更新为 true
- android-studio - Android Studio 中 Flutter 项目的文件组模板