Могу ли я запросить информацию об изображении (например, ОС) в реестре удаленного докера? - PullRequest
0 голосов
/ 26 апреля 2018

Есть ли какая-либо команда, которую я могу запустить в реестре Docker (публичный и частный), который может вернуть образ операционной системы? В частности, я стараюсь различать образы Linux и Windows, а не дистрибутивы Linux.

Причина в том, что у нас сегодня есть система сборки на основе докера, для которой мы пытаемся добавить поддержку контейнеров Windows и LCOW. Теоретически, сборки Linux могут происходить на серверах Windows или Linux, поэтому мы хотим, чтобы инструмент имел возможность автоматически добавлять sudo в команде docker и --platform в командах pull / run (а также некоторых других вещи), когда это уместно. Однако для этого необходимо, чтобы мы автоматически определяли ОС образа. Я просмотрел документацию по докеру и не смог найти поддержки для такого запроса, но, возможно, я что-то упустил.

Когда я пишу это, я осознаю, что если бы докер-клиент мог автоматически определять ОС образа, он, вероятно, встроил бы это обнаружение в клиент, а не вводил новый аргумент --platform на всех различные команды докера.

1 Ответ

0 голосов
/ 26 апреля 2018

Удален старый ответ, потому что он был неверным.


Project Atomic имеет инструмент под названием " skopeo ", который делает то, что вы хотите. Вот ссылка на репозиторий github

После того, как вы установили инструмент, вы должны просто сделать:

$ 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.

Хитрость в том, чтобы выяснить, какие API-вызовы нужно сделать для docker.io, чтобы получить эту информацию. API докера-концентратора / реестра немного недокументированы, и не совсем очевидно, откуда эта информация. Предоставление этой информации простым способом, по-видимому, является открытой ошибкой:

Предложение: проверить изображение json в реестре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...