Docker 可以通过不同的配置方式与 Artifactory 协同工作,包括:
- 仓库路径方法
- 子域名方法
- 端口方法
本问题使用的是仓库路径方法,因此我们会通过完整路径请求镜像,例如:
docker pull / push <HOST>:8081/<REPOSITORY_KEY>/<IMAGE>:<TAG>
docker login <HOST>:8081
值得注意的是,为了使其正常工作,我们需要进入Artifactory的HTTP设置,并将Docker方法设置为“存储库路径”,否则某些Tomcat级别的重写未启用,您的登录可能无法正常工作。
子域替换了存储库名称从路径到子域中,正如之前有人提到的那样。例如:
docker pull / push <REPOSITORY_KEY>.<HOSTNAME>/<IMAGE>:<TAG>
docker login <REPOSITORY_KEY>.<HOSTNAME>
端口方法与其他两种方法类似,但不同之处在于,我们不会从路径中移除存储库以进行声明并将其前置到主机名中,而是使用不同的端口来区分存储库。
docker pull / push <HOST>:<REPOSITORY_PORT>/<IMAGE>:<TAG>
docker login <HOST>:<REPOSITORY_PORT>
仓库端口将在反向代理层的重写中定义,与子域方法相同。
问题所涉及的问题可能是之前提到的不安全注册表,因为docker需要使用HTTPS,除非明确允许不这样做。
对于仓库路径方法,如果使用SSL,请确保使用通配符证书*.myhostname.com,以便可以安全地连接到不同的仓库,并且不会抱怨主机名与证书不匹配。
有关某些措辞的澄清:
Docker镜像:在Docker术语中,将被称为“命名空间/仓库:标签”的组。例如,在docker pull docker-repo.myhostname.com/mycompany/ourapp:latest
中,图像名称将为mycompany/ourapp:latest
仓库:在Docker中,仓库是大多数人认为的图像名称,或者在上面的示例中为“ourapp”。我大多数时候所说的仓库是大多数人称为注册表的东西。术语变得混乱,因为Artifactory可以容纳许多这些注册表,并且对于大多数其他技术,命名约定往往是在该级别称它们为“存储库”。当谈论Artifactory并且有人说“存储库”时,最有可能是指整个注册表。