GitLab CI/CD流水线执行成功但VPS未生成Docker镜像求助
GitLab流水线执行成功但VPS上未生成Docker镜像排查求助
近期搭建了从gitlab.com到VPS服务器的自动化任务流水线,Docker Runner已配置且与GitLab关联正常,流水线执行成功,但VPS本地始终未生成目标镜像,恳请协助排查。
Dockerfile内容
# 使用官方Node.js运行时作为基础镜像 FROM node:latest # 设置工作目录 WORKDIR /app # 复制package.json和package-lock.json COPY package*.json ./ # 安装依赖 RUN npm install # 复制剩余应用代码 COPY . . # 构建应用 RUN npm run build # 暴露应用端口 EXPOSE 3000 # 定义启动命令 CMD ["npm", "start"]
.gitlab-ci.yml内容
stages: - build - deploy build_job: stage: build image: node:latest script: - echo "移除node_modules..." - rm -rf node_modules/ # 若存在则删除node_modules目录 - echo "安装依赖..." - npm install - echo "构建应用..." - npm run build artifacts: paths: - build/ deploy_dev: stage: deploy image: docker:latest services: - docker:dind before_script: - echo "停止并移除现有容器..." - docker stop demo-front || true - docker rm demo-front || true script: - echo "部署到开发环境..." - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY" - docker build -t "$CI_REGISTRY_IMAGE:dev" . - docker push "$CI_REGISTRY_IMAGE:dev" - docker images # 列出所有Docker镜像以验证是否构建成功 - docker run -d -p 3002:3000 --name demo-front --restart always "$CI_REGISTRY_IMAGE:dev" only: - dev environment: name: development url: https://demo-web.test.com after_script: - docker logout "$CI_REGISTRY"
排查方向
- 确认Runner部署位置:检查是否使用了GitLab共享Runner而非VPS本地Runner。共享Runner构建的镜像仅存在于共享集群机器中,不会同步到你的VPS。
- DinD环境隔离问题:当前deploy阶段使用
docker:dind服务,构建的镜像仅存在于DinD容器内部的Docker daemon中,不会出现在VPS本地Docker环境。若要直接在VPS生成镜像,需将Runner改为shellexecutor(确保Runner用户加入docker组),并移除services: - docker:dind配置。 - 镜像拉取验证:当前
docker run命令会尝试从Registry拉取镜像,但拉取失败可能不会终止流水线(后台运行模式)。建议在docker run前添加docker pull "$CI_REGISTRY_IMAGE:dev",并在脚本开头加set -e让错误直接暴露。 - 查看流水线日志细节:检查deploy_dev阶段的完整日志,确认
docker images输出是否显示镜像存在,以及docker push、docker run是否有隐藏的认证或网络错误。
内容的提问来源于stack exchange,提问作者Tojo
相关产品推荐
相关产品推荐

