在AWS CodeDeploy中使用Git及Docker-Compose遇权限与容器问题
问题1:CodeDeploy执行脚本时Git拉取权限拒绝
原因
直接登录EC2使用的是ec2-user用户,该用户的SSH密钥已授权访问Git仓库;但CodeDeploy通过codedeploy-agent用户执行脚本,此用户没有对应的SSH密钥权限,导致拉取代码失败。
解决方法
方法1:给codedeploy-agent用户配置SSH密钥
- 切换到codedeploy-agent用户:
sudo su - codedeploy-agent -s /bin/bash - 创建并配置.ssh目录权限:
mkdir -p ~/.ssh chmod 700 ~/.ssh - 复制ec2-user的SSH密钥到该用户目录:
cp /home/ec2-user/.ssh/id_rsa ~/.ssh/ chmod 600 ~/.ssh/id_rsa - 退出codedeploy-agent用户:
exit
方法2:Git命令中指定密钥路径
修改deploy.sh中的git拉取命令,显式指定ec2-user的密钥:
GIT_SSH_COMMAND="ssh -i /home/ec2-user/.ssh/id_rsa" git pull origin develop
额外检查
确认EC2实例的公钥已添加到Git托管平台(如GitHub、GitLab)的SSH授权列表中。
问题2:docker-compose exec提示容器未运行
原因
docker-compose exec仅能对运行中的容器执行命令,出现报错可能是:
- app服务对应的容器未启动
- 脚本执行时未指定正确的docker-compose配置文件路径
- docker-compose.yml中服务名称拼写错误
解决方法
先确保容器处于运行状态
修改deploy.sh,在执行exec命令前先启动容器:cd /home/ec2-user/myapp docker-compose up -d app # 后台启动app服务容器 docker-compose exec app bash -c "php artisan migrate && composer install"指定完整配置文件路径
如果脚本执行的工作目录不确定,显式指定docker-compose.yml路径:docker-compose -f /home/ec2-user/myapp/docker-compose.yml up -d app docker-compose -f /home/ec2-user/myapp/docker-compose.yml exec app bash -c "php artisan migrate && composer install"检查服务名称正确性
打开/home/ec2-user/myapp/docker-compose.yml,确认服务块的service名称确实是app,没有拼写错误。
内容的提问来源于stack exchange,提问作者kyoshida
相关产品推荐
相关产品推荐

