Команды runc и ctr не отображают образы и контейнеры докеров

У меня есть несколько образов и контейнеров Docker, работающих на виртуальной машине. Но такие команды, как «runc list», ничего из этого не выводят.

Как я могу сообщить runc/containerd о моих существующих образах докеров?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
4
0
2 408
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Среда выполнения (runc) использует так называемый корневой каталог среды выполнения для хранения и получения информации о контейнерах. В этом корневом каталоге runc размещает подкаталоги (по одному на каждый контейнер), и каждый из них содержит файл state.json, в котором находится описание состояния контейнера.

Расположение по умолчанию для корневого каталога среды выполнения — либо /run/runc (для контейнеров без рута), либо $XDG_RUNTIME_DIR/runc (для контейнеров без рута) — последнее также обычно указывает где-то под /run (например, /run/user/$UID/runc).

Когда механизм контейнера вызывает runc, он может переопределить корневой каталог среды выполнения по умолчанию и указать пользовательский (вариант --root для runc). Docker использует эту возможность, например. в моем случае он указывает /run/docker/runtime-runc/moby как корень среды выполнения.

Тем не менее, чтобы runc list увидеть ваши контейнеры Docker, вы должны указать его на корневой каталог среды выполнения Docker, указав параметр --root. Кроме того, учитывая, что контейнеры Docker по умолчанию не являются корневыми, вам потребуются соответствующие привилегии для доступа к корневому каталогу среды выполнения (например, с помощью sudo).

Итак, вот как это должно работать:

$ docker run -d alpine sleep 1000
4acd4af5ba8da324b7a902618aeb3fd0b8fce39db5285546e1f80169f157fc69

$ sudo runc --root /run/docker/runtime-runc/moby/ list
ID                                                                 PID         STATUS      BUNDLE                                                                                                                               CREATED                          OWNER
4acd4af5ba8da324b7a902618aeb3fd0b8fce39db5285546e1f80169f157fc69   18372       running     /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/4acd4af5ba8da324b7a902618aeb3fd0b8fce39db5285546e1f80169f157fc69   2019-07-12T17:33:23.401746168Z   root

Что касается картинки, то вы не можете заставить runc их увидеть, так как он вообще не имеет понятия об изображении - вместо этого он оперирует связки. За создание пакета (например, на основе изображения) отвечает вызывающая сторона (в вашем случае - containerd).

Как найти корневой каталог среды выполнения?

Sam Thomas 11.05.2020 23:54

@SamThomas Я не уверен, что есть простой способ заставить Docker рассказать вам об этом, так как это своего рода «деталь реализации». Говоря о нетривиальных способах сделать это - вероятно, straceing containerd (как @Niklas предложил вам в твоя тема) является наиболее универсальным подходом, так как он покажет фактические параметры, которые передаются runc. Извините, но я не могу предложить ничего лучшего (на самом деле, я использовал тот же способ для определения местоположения каталога среды выполнения на моей машине, когда писал этот пост).

Danila Kiver 13.05.2020 01:37

да :( . Я бы хотел, чтобы runc по крайней мере поддерживал список всех корней, которые использовались для запуска контейнеров с

Sam Thomas 13.05.2020 01:51

Другие вопросы по теме