OS:Amazon Linux(托管在AWS上) Docker版本:17.x 工具:Ansible,Docker
我们的开发人员使用Ansible能够启动各个AWS竞标环境,这些环境中填充了在其本地计算机上构建的Docker映像,被推送到在AWS竞标机上创建的Docker注册表中,然后下拉并运行。
当开发人员在其Macbook上本地执行此操作时,ansible将使用sbt协调构建代码,启动一个AWS Spot实例,运行一个docker注册表,将映像推入docker注册表,命令该实例拉下映像并运行它,运行测试套件等。
为了使非开发人员能够更好,更轻松地运行单个测试环境,我们将ansible脚本放在Jenkins的后面,并使用其用户名让ansible在Route53中创建一个指向其临时现场实例环境的域名
在没有注册表的情况下这一切都很好-即使用JFrog Artifactory让这些动态env只需提取预先构建的图像。它使质量检查小组成员能够启动他们想要的任何版本的环境。但是现在要允许它构建代码并推送,我需要拥有一个不安全的注册表,这就是问题的解决方法……
由于任何用户都可以运行此命令,因此Route53域名是动态的。这意味着我不能只在--insecure-registry条目daemon.json中进行硬编码。我试图找到一种设置通配符注册表的方法,但它似乎对我没有用。另外,由于这是一台共享的构建服务器(正在运行ansible命令的服务器),所以我不想继续添加条目并重新启动docker,因为其他事情可能正在运行。
因此,总结一下问题:
答案 0 :(得分:0)
到目前为止,我已经找到了可以满足我的需求的解决方案,但还没有100%满意。我会做更多的工作。它不能处理通配符的第一种情况,但对于第二个有关不重新启动而重新加载的问题似乎确实有用。
第一个问题是我编辑了错误的文件。它既不尊重/etc/sysconfig/docker
,也不尊重$HOME/.docker/daemon.json
。对我而言,唯一适用于Amazon Linux的文件是/etc/docker/daemon.json
,因此我手动对其进行了编辑,然后测试了重新加载并使用docker info进行了验证。我将对此进行更多的工作,以便能够根据需要以编程方式插入条目,但是手动测试有效:
sudo vim /etc/docker/daemon.json
sudo systemctl reload docker.service
docker info