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

Laravel Vapor部署ECR时Docker登录因密码选项不安全失败求助

解决Laravel Vapor部署Docker容器时ECR登录失败的问题

先处理pass未初始化的问题

Vapor依赖pass工具存储Docker凭证,必须先完成初始化:

  • 生成GPG密钥:执行gpg --gen-key,按提示设置用户名、邮箱及密钥密码
  • 初始化pass:pass init <你的GPG密钥关联邮箱>,例如pass init your-work-email@example.com
  • 验证可用性:执行pass ls,无报错则说明初始化完成

让Vapor使用--password-stdin登录ECR的两种方案

方案一:手动预登录ECR(快速临时解决)

直接通过AWS CLI生成符合要求的登录命令,绕过Vapor的登录流程:

  1. 替换区域和仓库URI,执行以下命令完成登录:
    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com/your-repo-name
    
  2. 登录成功后,再运行vapor deploy production,Vapor会检测到已登录状态,跳过登录步骤

方案二:修改Vapor CLI的登录逻辑(长期解决)

如果需要让Vapor默认使用--password-stdin,可以修改其Docker登录相关代码:

  1. 找到Vapor CLI的Docker部署模块(路径通常为~/.vapor/vendor/laravel/vapor-cli/src/Commands/DeployCommand.php,或根据你的安装位置调整)
  2. 找到执行docker login的代码段,将原有命令替换为:
    $command = sprintf(
        'aws ecr get-login-password --region %s | docker login --username AWS --password-stdin %s',
        $environment->region(),
        $repositoryUri
    );
    
  3. 保存修改后,重新运行vapor deploy production即可

额外注意事项

  • 确保AWS CLI配置的IAM用户拥有ecr:GetAuthorizationToken权限
  • 检查~/.docker/config.json,删除无效的ECR凭证后再重新登录
  • 团队协作场景下,所有成员都需完成pass初始化,避免凭证存储问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:03:24