拉取 Artifactory Docker 图片

Pull Artifactory Docker Images

我使用 ip (x.x.x.x) 在远程桌面上下载了 artifactory 6.6.0 并连接到端口 8081。

我可以从我的电脑连接到 artifactory http://x.x.x.x:8081/artifactory。 我的计算机上有 docker 客户端,但远程桌面上没有 docker。

我有一个名为 "docker" 的虚拟 docker 存储库。

我想通过 docker 客户端登录到我在 artifactory 上的 docker 存储库 -> "docker login " 然后在这个存储库中拉取图像。

如何登录并从 artifactory 中提取图像? 请注意,我没有 SSL,所以我使用的是 HTTP。

首先: docker 与 Artifactory 相关的登录 -> 配置 -> HTTP 设置 我用 "Docker access method" 作为 "Repository path"

docker login -u admin -p **** x.x.x.x:8081

第二个: 由于我使用 HTTP,因此应将此 ip "x.x.x.x:8081" 添加到 Docker 客户端中的 "insecure-registries"。

或者将其添加到 ~/.docker/config.json 中的不安全注册表中,如下所示:

   {
    "auths": {
        "x.x.x.x:8081": {}
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/18.09.0 (windows)"
    },
    "credsStore": "wincred"
}

然后重启docker

我不知道仅使用 IP 地址访问服务器时它是如何工作的...但是如果您使用主机名,则需要在其前面加上存储库的名称。

示例:

我的 Artifactory Enterprise 服务器位于 https://artifactory.mycompany.com

我可以用

拉取图像
docker login repo1.artifactory.mycompany.com
docker pull repo1.artifactory.mycompany.com/myImage:latest

Dockerfile 示例:

FROM repo1.artifactory.mycompany.com/myImage:latest

(您需要 运行 docker login repo1.artifactory.mycompany.com 才能 运行 宁 docker build。)

Docker 可以通过不同的方式配置为在 Artifactory 端使用,这些是:

  1. 回购路径方法
  2. 子域方法
  3. 端口方法

回购路径是这个问题正在使用的方法,为此我们通过完整路径请求图像,例如

docker pull / push <HOST>:8081/<REPOSITORY_KEY>/<IMAGE>:<TAG>
docker login <HOST>:8081

值得注意的是,为了使它起作用,我们需要进入 Artifactory 的 HTTP 设置并将 Docker 方法设置为 "Repository Path" 否则一定 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 术语中的组 "namespace/repository:tag"。例如在 docker pull docker-repo.myhostname.com/mycompany/ourapp:latest 中图像名称将是 mycompany/ourapp:latest

存储库:在 Docker 存储库中是大多数人认为的图像名称,或者在上面的示例中 "ourapp"。大多数时候我所说的存储库,就是大多数人所说的注册表。由于 Artifactory 可以容纳许多这样的注册表,因此术语变得令人困惑,并且对于大多数其他技术,命名约定往往是在该级别将它们称为 "repositories"。在谈论 Artifactory 时,有人说 "repository" 它很可能指的是整个注册表。