使用GitHub Action+Docker Compose构建Spring项目CI/CD遇配置文件缺失错误
问题解决:docker-compose找不到配置文件的问题
核心原因
你在GitHub Action中使用appleboy/ssh-action的source参数将本地的docker-compose.yaml传到EC2服务器,但默认情况下,文件会被传到远程用户的家目录(比如/home/ubuntu/),而你的script部分执行docker-compose up -d时,当前工作目录并不是这个家目录,导致Docker找不到配置文件。
解决方案
方案1:脚本中切换到家目录执行
修改Deploy to dev步骤的script内容,先切换到文件所在的家目录:
script: | sudo docker rm -f $(docker ps -qa) sudo docker pull redis sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.PROJECT_NAME }} # 切换到家目录,确保能找到docker-compose.yaml cd ~ docker-compose up -d docker image prune -f
方案2:指定docker-compose文件的绝对路径
如果不想切换目录,可以直接在命令中指定配置文件的绝对路径:
script: | sudo docker rm -f $(docker ps -qa) sudo docker pull redis sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.PROJECT_NAME }} # 使用绝对路径指定配置文件 docker-compose -f /home/${{ secrets.AWS_USERNAME }}/docker-compose.yaml up -d docker image prune -f
方案3:明确指定source的目标路径
在ssh-action的source参数中,直接指定远程服务器的目标路径,确保文件传到你期望的位置:
source: "docker-compose.yaml:/home/${{ secrets.AWS_USERNAME }}/docker-compose.yaml"
额外需要检查的点
- Docker Compose命令版本:如果你的EC2服务器安装的是新版Docker(20.10+),命令是
docker compose(无横杠),旧版才是docker-compose,可以在远程服务器执行docker-compose --version确认,避免命令错误。 - 外部网络存在性:你的docker-compose配置中使用了
external: true的manager-network,需要确保EC2服务器上已经创建这个网络,否则启动会失败。可以在脚本中添加创建命令(如果不存在则创建):
sudo docker network inspect manager-network >/dev/null 2>&1 || sudo docker network create manager-network
内容的提问来源于stack exchange,提问作者jaepyo-Lee
相关产品推荐
相关产品推荐

