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

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

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

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

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