拉取 Artifactory Docker 镜像

4

我在远程桌面上使用IP地址(x.x.x.x)下载了Artifactory 6.6.O,并连接到8081端口。

我可以从我的计算机http://x.x.x.x:8081/artifactory连接到Artifactory。我在本地计算机上安装了Docker客户端,但在远程桌面上没有安装Docker。

我有一个名为“docker”的虚拟Docker仓库。

我想通过Docker客户端登录到Artifactory上的Docker仓库 -> "docker login",然后拉取此仓库中的映像。

如何登录并从Artifactory中拉取映像?请注意,我没有SSL,所以正在使用HTTP。


你尝试从远程桌面登录并失败了吗?Artifactory是否配置为不安全的注册表? - Dror Bereznitsky
3个回答

1

首先:

docker登录相关的Artifactory设置->配置->HTTP设置。我使用"Docker访问方法"作为"存储库路径"。

docker登录 -u管理员 -p **** x.x.x.x:8081

其次:

由于我使用HTTP,所以应将此ip“x.x.x.x:8081”添加到Docker客户端中的"insecure-registries"。

enter image description here

或者只需像下面这样将其添加到~/.docker/config.json的不安全注册表中:

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

然后重新启动docker


在当前的 Docker 客户端中,似乎不再提供此选项。另外,仅使用 docker login hostname:port 将自动将其添加到 %HOMEPATH%/docker/config.json 中的“auths”中。无需重新启动 Docker。 - cowlinator

0

Docker 可以通过不同的配置方式与 Artifactory 协同工作,包括:

  1. 仓库路径方法
  2. 子域名方法
  3. 端口方法

本问题使用的是仓库路径方法,因此我们会通过完整路径请求镜像,例如:

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并且有人说“存储库”时,最有可能是指整个注册表。


0

我不知道仅使用 IP 地址访问服务器的工作原理......但如果使用主机名,则需要在其前缀中加上 repo 的名称。

例如:

我的 Artifactory 企业版服务器位于 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 build之前,您需要先运行docker login repo1.artifactory.mycompany.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接