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

GitHub Actions部署Docker Compose时本地卷挂载失败求助

问题根源

当你设置DOCKER_HOST: "ssh://${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}"时,Docker客户端在GitHub Actions的Ubuntu Runner上运行,但Docker服务端部署在远程生产服务器。此时docker-compose里的卷映射./prometheus/:/etc/prometheus/中的./prometheus/指向远程服务器当前工作目录下的路径,而非Runner上已拉取的代码目录。

你已将代码拉取到Runner,但远程服务器上不存在该prometheus文件夹,因此Prometheus容器启动时找不到配置文件。

解决方案

核心是将Runner上的代码(包含prometheus文件夹)同步到远程服务器,再在远程服务器的代码目录下执行docker-compose命令。修改工作流步骤如下:

name: CD

on:
  push:
    branches: [ production ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: webfactory/ssh-agent@v0.8.0
        with:
          ssh-private-key: ${{ secrets.GHA_DEPLOY_SSH_PRIVATE_KEY }}
      - name: Sync code to remote server
        run: |
          # 确保远程部署目录存在,不存在则创建
          ssh ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }} "mkdir -p /opt/deploy/prometheus-project"
          # 同步Runner上的代码到远程目录,可添加--exclude排除无需同步的文件
          scp -r . ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}:/opt/deploy/prometheus-project/
      - name: Deploy on remote server
        run: |
          ssh ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }} << 'EOF'
            cd /opt/deploy/prometheus-project
            docker-compose -f docker-compose.prod.yml down --remove-orphans
            docker-compose -f docker-compose.prod.yml build
            docker-compose -f docker-compose.prod.yml up -d --force-recreate
          EOF
关键说明
  • 替换/opt/deploy/prometheus-project为你在远程服务器上实际的部署目录
  • 若需排除.git、node_modules等文件,可在scp命令中添加--exclude='.git'这类参数
  • 无需再设置DOCKER_HOST环境变量,所有docker-compose命令直接在远程服务器执行,卷映射的相对路径会正确指向远程服务器上的代码目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:26