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


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