如何将不安全的docker注册表与Amazon EC2 Container Service(ECS)一起使用?

Eng*_*r81 7 amazon-ec2 amazon-web-services amazon-ecs

我们在AWS VPC中使用了一个无法从外部访问的Docker注册表.我们希望能够从此注册表启动ECS中的任务,但是我们发现该服务只处于PENDING状态,因为Docker守护程序无法访问注册表.

我通过更改启动配置的用户数据找到了一种解决方法,但我觉得这样做不是最好的方法:

#!/bin/bash
echo ECS_CLUSTER=MY_CLUSTER_NAME >> /etc/ecs/ecs.config
echo OPTIONS=--insecure-registry=insecure.registry.hostname:5000 > /etc/sysconfig/docker
service docker restart
docker start ecs-agent
Run Code Online (Sandbox Code Playgroud)

这非常有效,我可以看到我的任务正在按预期运行.我认为这不一定是最好的方法.

AWS指着我对这个物品,其讨论了与私人注册认证,但我不希望进行身份验证,只需要有泊坞忽略我使用的是不安全的(即不是HTTPS)注册表中的事实.

有没有人有更好的解决方案?

谢谢

Eng*_*r81 9

我已经与AWS进一步讨论并提供以下解决方案:

您可以--insecure-registry使用在引导时执行的用户数据脚本来设置docker选项(包括).例如,--insecure-registry可以使用如下脚本设置:

#cloud-config
bootcmd:
 - cloud-init-per instance $(echo "OPTIONS=\"--insecure-registry=hostname:5000\"" > /etc/sysconfig/docker)
Run Code Online (Sandbox Code Playgroud)

通过不重启docker,这种方式避免了以前的解决方案.

关于不安全的方法,如果我们使用自签名证书,我们可以通过将证书添加到系统CA信任库或Docker的特殊信任存储来利用它.

在Amazon Linux AMI和ECS优化的AMI上,系统CA信任存储位于/usr/share/pki/ca-trust-source/usr/share/pki/ca-trust-source/anchors(根据格式,请参阅/usr/share/pki/ca-trust-source/README详细信息),您需要update-ca-trust在添加证书后运行该命令.Docker关于不安全注册表的文档提供了更多有关此内容的详细信息:

https://docs.docker.com/reference/commandline/cli/#insecure-registries https://github.com/docker/docker/blob/master/docs/sources/articles/certificates.md

我希望这也有助于其他人

  • 您需要在EC2控制台中调整启动配置的"用户数据".您无法实际编辑启动配置,您需要创建副本和"编辑详细信息".在那里,单击"高级详细信息"菜单,您可以看到"用户数据"输入.在那里编辑,保存配置,然后转到`Auto Scaling Group`,编辑`Details`选项卡并在顶部选择新的`Launch Configuration` (3认同)