我发现这个问题是因为我遇到了同样的错误。以下是我在 Beanstalk 上实际部署多容器应用程序的步骤:
为了克服这个特殊的错误,我使用了eb CLI 工具。出于某种原因,使用eb deploy 而不是压缩和上传自己解决了这个问题。它实际上并没有工作,但它给了我一个新的错误。
所以,我更改了我的Dockerrun.aws.json,这是一种需要更多文档的文件格式,直到我不再收到关于那个的错误。
然后,我得到了一个更好的错误!
ERROR: [Instance: i-0*********0bb37cf] Command failed on instance.
Return code: 1 Output: (TRUNCATED)..._api_call
raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (AccessDenied) when
calling the GetObject operation: Access Denied
Failed to download authentication credentials [config file name] from [bucket name].
Hook /opt/elasticbeanstalk/hooks/appdeploy/enact/02update-
credentials.sh failed. For more detail, check /var/log/eb-activity.log
using console or EB CLI.
根据this part of the docs 解决这个问题的方法是
在 IAM 控制台中打开 Roles 页面。
选择 aws-elasticbeanstalk-ec2-role。
在权限选项卡的托管策略下,选择附加策略。
为您的应用程序使用的其他服务选择托管策略。例如,AmazonS3FullAccess 或 AmazonDynamoDBFullAccess。 (对于我们的问题,S3 问题)
选择附加策略。
这部分真的很令人兴奋,因为我又遇到了一个错误:Authentication credentials are not in JSON format as expected. Please generate the credentials using 'docker login'.(请记住,我试着按照the instructions 来了解如何做到这一点,但是,哦,好吧)。原来这是在我身上,我在存储在 S3 上的 DockerHub 身份验证文件中的 JSON 格式不正确。我将文件重命名为 dockercfg.json 以进行语法检查,似乎 Beanstalk/ECS 可以将 .json 作为名称的一部分,因为这一次......有一个不同的错误:CannotPullContainerError: Error: image [DockerHub organization]/[repo name]:latest not found)。嗯,可能有错别字?让我们检查一下:
$ docker run -it [DockerHub organization]/[repo name]:latest
Unable to find image '[DockerHub organization]/[repo name]:latest' locally
latest: Pulling from [DockerHub organization]/[repo name]
好的,repo 就在那里。所以...我的身份验证不好?是的,事实证明我遵循了 DockerHub auth 文档中的一个示例,这是您不应该做的事情。你的dockercfg.json 应该是这样的
{
"https://index.docker.io/v1/": {
"auth": "ZWpMQ=Vyd5zOmFsluMTkycN0ZGYmbn=WV2FtaGF2",
"email": "your@email.com"
}
}
还有一些错误(卷sourcePath 必须是绝对路径!这就是invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed 消息的含义),但它最终部署了。对不起小说;希望它可以帮助某人。