![](/img/trans.png)
[英]Viewing node.js logs (console.log) from docker-compose deployment on elastic beanstalk
[英]Elastic Beanstalk Docker private registry with docker-compose
我有一个来自用于团队项目的私有注册表的 Docker 映像。
Docker-compose.yml 由每个团队成员 git 克隆,以允许容器的卷、环境和端口的随时可用的配置。
version: '3'
services:
webApp:
image: my-private-registry/docker-app:latest
ports:
- 80:80
volumes:
- vendors:/var/www/app/vendor
- ./var/logs/apache2:/var/log/apache2
volumes:
vendors:
现在我希望将该图像/撰写文件项目部署到 AWS Elastic Beanstalk,但该平台无法使用 docker-compose 文件访问私有 Docker 注册表(图像可能需要 Z05B6053C41A2130AFD6登录错误)
到目前为止我已经尝试和注意到的一些信息:
A] 如果图像是公开的,则 docker-compose 文件(到目前为止,我只是使用 web 控制台上传)确实有效,图像被提取,容器被创建并且应用程序运行良好。
但是,如果图像是私有的,则即使按照此处的 AWS 说明进行操作,也无法获得访问权限。
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"bucket": "my-s3-bucket",
"key": "config.json"
},
}
通过阅读 eb-engine.log,我可以看到第一个docker-compose pull
工作正常,但后来最终docker-compose up
失败 - 触发错误,好像身份验证在此过程中丢失了。
我知道 docker-compose pull有效,因为在 S3 Bucket 上的 config.json 中设置错误的身份验证会触发错误。
B] 如果我只使用Dockerrun.aws.json
而不是docker-compose
文件,则身份验证和配置与私有 docker 映像完美配合。
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"bucket": "my-s3-bucket",
"key": "config.json"
},
"Ports": [
{
"ContainerPort": 80,
"HostPort": 80
}
],
"Image": {
"Name": "my-private-registry/docker-app:latest",
"Update": "true"
},
"Volumes" : [
{
"HostDirectory":"/var/app/current/var/logs/apache2",
"ContainerDirectory":"/var/log/apache2"
},
]
}
这对于测试目的来说是可以的,但会迫使我们删除从 docker-compose 到它的任何更改 - 因为 compose 文件在其他非 AWS 环境中使用,并且从长远来看将不太理想。
我错过了什么? 我的环境配置是否与 docker-compose 不匹配?
谢谢
更新 1通过使用sudo watch -n 1 -d cat /root/.docker/config.json
我已经看到在docker-compose pull
期间存在身份验证,但是一旦启动CleanEbExtensions
,它们就消失了。
并且此命令在执行 docker-compose 之前启动 - 并且docker-compose down --rmi all
在两者之间执行,使拉取无效。
怎么来的?
更新
原来这是一个 AWS 错误。 我在下面的答案中详细介绍了解决方法的步骤。
事实证明这是AWS 方面的一个错误。 我发现了一个非常相似的问题
AWS EB docker-compose 部署从私有注册表访问被禁止
当前的解决方案是使用部署挂钩代替登录执行 docker 或复制 authfile。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.