You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CI/CD部署服务器时遇Git与Docker错误,请求协助排查

问题排查与解决方案

一、Git Rebase 失败问题

原因

服务器上的 /mnt/tourmix-main 目录存在未提交的本地变更,Git 在执行 pull --rebase 时会阻止操作,避免本地变更被覆盖。

解决方案

根据实际需求选择以下一种方式:

  1. 暂存本地变更后拉取:
    修改SSH脚本中的命令:
    cd /mnt/tourmix-main
    git stash
    git pull origin master --rebase
    git stash pop  # 恢复暂存的变更,若有冲突需手动解决
    
  2. 丢弃本地变更(确认不需要时使用):
    cd /mnt/tourmix-main
    git reset --hard HEAD
    git pull origin master --rebase
    
  3. 自动暂存变更(Git 2.23+ 支持):
    直接使用带自动暂存参数的拉取命令:
    git pull origin master --rebase --autostash
    

二、Docker 构建无法添加套接字文件问题

原因

Docker 构建时会将当前目录作为构建上下文打包成 tar 发送给守护进程,但 tar 格式不支持套接字文件(mysql.sock 是 MySQL 运行时生成的套接字)。你的 Dockerfile 中 COPY . . 会将项目根目录下的所有文件(包括 database/mysql.sock)纳入构建上下文,导致报错。

解决方案

  1. 添加 .dockerignore 文件排除不必要的文件/目录:
    在项目根目录创建 .dockerignore 文件,添加以下内容:
    database/
    node_modules/
    .git/
    
    构建时会跳过 database 目录,避免包含套接字文件。
  2. 修正 Dockerfile 的复制逻辑:
    不要使用 COPY . . 复制整个目录,而是只复制必要的文件,比如:
    # 替换原来的 COPY . .
    COPY package*.json ./
    COPY next.config.js ./
    COPY public/ ./public/
    COPY src/ ./src/
    COPY prisma/ ./prisma/
    
  3. 调整服务器目录结构:
    将 database 目录移出项目根目录(比如放到 /var/lib/mysql),因为运行时生成的套接字文件不需要纳入 Docker 镜像构建上下文。

额外注意事项

  1. Dockerfile 语法错误:
    你的 Dockerfile 存在几处语法错误,会导致构建失败:
    • 第9行:COPY -from-dependencies 应改为 COPY --from=dependencies
    • 第21行:COPY -from-builder 应改为 COPY --from=builder
    • 镜像标签 node:1ts 错误,应统一为 node:lts
  2. GitHub Workflow 冗余步骤:
    workflow 中的 actions/checkout@v3 步骤冗余,因为你是通过 SSH 到服务器拉取代码,不需要在 GitHub runner 上检出代码,可直接删除该步骤。

内容的提问来源于stack exchange,提问作者Matteo Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:20:37