docker - 我可以查询远程 docker 注册表以获取图像信息(例如操作系统)吗?

标签 docker

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

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

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

最佳答案

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

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> 下提供的 docker 图像信息,你会发现它看起来像这样:
{
  "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

关于docker - 我可以查询远程 docker 注册表以获取图像信息(例如操作系统)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50043492/

相关文章:

vagrant - 使用Vagrant时访问Docker功能

docker - 缺少依赖项 Docker glibc ../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S

node.js - 在 Amazon ECS 上的 Docker 中运行 Node API 的最佳方式是什么?

python - Docker pip3未安装软件包

asp.net - Azure Service Fabric 与 Docker 做同样的事情吗?

docker - 如何仅在开发环境中使用 docker-compose 附加卷?

containers - 无法设置LVM时的快照选项

ubuntu - Docker 容器——在旧的 java6 版本上运行新的 java8 代码

linux - 可以从内部暂停无特权的Docker容器吗?

docker - 如何在 QNAP 上配置 Docker 最大并发上传数