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
相关产品推荐
相关产品推荐

