我可以在远程docker注册表中查询图像信息(例如OS)吗?

时间:2018-04-26 12:52:01

标签: docker

我是否可以针对可以返回图像操作系统的docker注册表(公共和私有)运行命令?具体来说,我希望区分Linux和Windows图像,而不是Linux发行版之间。

原因是我们今天有一个基于docker的构建系统,我们正在尝试添加对Windows容器和LCOW的支持。理论上,Linux构建可以在Windows或Linux服务器上进行,因此我们希望该工具能够在docker命令上自动添加sudo并在pull / run命令上自动添加--platform(如以及其他一些事情)在适当的时候。但是,这要求我们自动检测图像的操作系统。我查看了docker文档,但无法找到对此类查询的任何支持,但也许我错过了一些内容。

在我写这篇文章时,我意识到如果docker客户端可以自动推断出图像的操作系统,他们可能会将这种检测内置到客户端而不是引入新的{{1所有各种docker命令的参数。

1 个答案:

答案 0 :(得分:3)

删除旧答案,因为它不正确。

Project Atomic有一个名为“skopeo”的工具可以满足您的需求。 Here's a link to the github repository

安装完工具后,您应该能够:

$ skopeo inspect docker://docker.io/microsoft/nanoserver | jq '.Os'
"windows"

$ skopeo inspect docker://docker.io/library/ubuntu | jq '.Os'
"linux"

背景:

如果您查看/var/lib/docker/image/<storage-driver>/imagedb/content/sha265/<image-sha>下可用的泊坞窗图片信息,您会发现它看起来像这样:

{
  "architecture": "amd64",
  "config": {
    ...
  },
  "container": "6e8eb576ec0f7564a85c0fbd39824e0e91c031aa0019c56c5f992449e88d1142",
  "container_config": {
  ...
  },
  "created": "2018-03-06T22:17:26.531075062Z",
  "docker_version": "17.06.2-ce",
  "history": [
...
  ],
  "os": "linux",
  "rootfs": {
    "type": "layers",
    "diff_ids": [
      "sha256:a94e0d5a7c404d0e6fa15d8cd4010e69663bd8813b5117fbad71365a73656df9",
      "sha256:88888b9b1b5b7bce5db41267e669e6da63ee95736cb904485f96f29be648bfda",
      "sha256:52f389ea437ebf419d1c9754d0184b57edb45c951666ee86951d9f6afd26035e",
      "sha256:52a7ea2bb533dc2a91614795760a67fb807561e8a588204c4858a300074c082b",
      "sha256:db584c622b50c3b8f9b8b94c270cc5fe235e5f23ec4aacea8ce67a8c16e0fbad"
    ]
  }
}

正如您所看到的那样,有一个名为os的字段,即linux。我怀疑如果你看一下windows图像的那个字段,它会说windows。这是通过docker inspect提供的信息。

棘手的一点是确定要向docker.io发出哪些API来获取此信息。 docker hub / registry API有点记录在案,并且这些信息来自哪里并不明显。以直截了当的方式提供这些信息似乎是上游的一个漏洞:

Proposal: inspect image json on a registry