systemd «Не удалось настроить пространство имен монтирования» в контейнере Docker

Это однопроходное -решение:

/Nodes/         { read = 1 }
/EndNodes/      { read = 0 }

!read           { next     }

NF == 4                         { n = $1; x = $2; y = $3; z = $4 }
z > max                         { delete set; i = 1; max = z     }
x >= 0 && y == 0 && z == max    { set[i++] = n                   }

END             { for (i in set) { print set[i] } }

Переменная readопределяет, должны ли мы действовать с текущей записью или нет. Если это 1, то мы делаем.

Третий блок отбрасывает текущий ввод, если он нас не интересует, и продолжает сверху со следующей записью.

В четвертом блоке задаются четыре удобные переменные: n, x, yи z. Их приятнее читать, чем $1и т. д.

5-й блок удаляет массив set. Массив set— это набор всех номеров узлов, которые мы нашли до сих пор и которые удовлетворяют критериям. Поскольку этот блок выполняется, если мы нашли новый максимум для z, все ранее найденные узлы становятся недействительными. Также сохраняем новый максимум(max). Переменная i— это просто индекс в массиве (счетчик, в основном ). Если максимум еще не найден, то неинициализированный maxбудет считаться нулевым в тесте.

Шестой блок выполняется, когда мы нашли узел, удовлетворяющий критериям. Номер узла сохраняется в массиве set, а iувеличивается.

В конце мы перебираем массив setи выводим его содержимое.

Результат при работе под GNU awk:

20
31
32

BSD awkи mawk, работающие на OpenBSD, создают список в обратном порядке.

1
10.12.2019, 17:18
1 ответ

Оказывается, мне нужно запустить контейнер в привилегированном режиме вот так:
(Также CAP_SYS_ADMINне было необходимости)

docker run -dt \
    --tmpfs /run --tmpfs /tmp \
    --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --device=/dev/net/tun \
    --cap-add NET_ADMIN \
    --privileged \
    <container>
0
27.01.2020, 23:55

Теги

Похожие вопросы