如何";“docker push”;动态不安全注册表?

如何";“docker push”;动态不安全注册表?,docker,ansible,docker-registry,Docker,Ansible,Docker Registry,操作系统:亚马逊Linux(托管在AWS上) Docker版本:17.x 工具:Ansible,Docker 我们的开发人员使用Ansible能够启动单个AWS spot环境,这些环境使用在本地机器上构建的docker映像填充,推入在AWS spot机器上创建的docker注册表,然后下拉并运行 当开发者在MacBook上本地执行此操作时,ansible将协调使用sbt构建代码,启动AWS spot实例,运行docker注册表,将图像推入docker注册表,命令实例下拉图像并运行它,运行test

操作系统:亚马逊Linux(托管在AWS上) Docker版本:17.x 工具:Ansible,Docker

我们的开发人员使用Ansible能够启动单个AWS spot环境,这些环境使用在本地机器上构建的docker映像填充,推入在AWS spot机器上创建的docker注册表,然后下拉并运行

当开发者在MacBook上本地执行此操作时,ansible将协调使用sbt构建代码,启动AWS spot实例,运行docker注册表,将图像推入docker注册表,命令实例下拉图像并运行它,运行testsuite,等等

为了使非开发人员能够更好、更容易地运行单独的测试环境,我们将ansible脚本放在Jenkins后面,并使用他们的用户名让ansible在Route53中创建一个域名,该域名指向他们的临时spot实例环境

这一切在没有注册表的情况下都非常有效——即使用JFrog Artifactory让这些动态环境只拉预构建的图像。它可以让QA团队成员根据自己的需要制作任意版本的env。但现在要让它构建代码和推送,我需要有一个不安全的注册表,这就是问题的症结所在

由于任何用户都可以运行此功能,因此Route53域名是动态的。这意味着我不能在daemon.json中硬编码--unsecure注册表项。我试图找到一种方法来设置一个通配符注册表,但它似乎不适合我。另外,因为这是一个共享构建服务器(运行ansible命令的服务器),所以我不想继续添加条目并重新启动docker,因为其他事情可能正在运行

因此,总结一下问题:

  • 有没有办法对不安全的注册表项使用通配符
  • 如何让docker在不重新启动docker守护程序的情况下识别不安全的注册表项

  • 到目前为止,我已经找到了这个解决方案来满足我的需求,但还不是100%满意。我会更努力的。它不处理通配符的第一种情况,但对于第二个关于不重新启动就重新加载的问题,它似乎确实有效

    第一个问题是我编辑了错误的文件。它不尊重
    /etc/sysconfig/docker
    ,也不尊重
    $HOME/.docker/daemon.json
    。我在AmazonLinux上工作的唯一文件是
    /etc/docker/daemon.json
    ,所以我手动编辑了它,然后测试了重新加载,并用docker信息进行了验证。我将在这方面做更多的工作,以编程方式根据需要插入条目,但手动测试可以:

    sudo vim/etc/docker/daemon.json sudo systemctl重新加载docker.service
    docker info

    我要么使用共享注册表(并定期清理旧图像;我手头没有很好的方法),要么使用
    docker save
    docker load
    复制中间图像,而不使用注册表。谢谢您的回答。我也有同样的问题。仅供参考,您还可以将证书放入/etc/docker/certs.d/。例如:/etc/docker/certs.d/registryurl:5000/ca.crt,在不重新加载或重新启动docker的情况下,docker会自动考虑到这一点。环境:Redhat 7.8和docker ce 19.03.X