Не удалось найти доступную для записи точку монтирования для иерархии cgroup 13 при попытке создания cgroup

Не удалось найти доступную для записи точку монтирования для иерархии cgroup 13 при попытке создания cgroup

Насколько я понимаю, иерархия 13 указывает на «name=systemd», я пытаюсь запустить довольно простую команду lxc-execute внутри среды разработки docker с помощью следующего:

docker run -i -t --cap-add=SYS_PTRACE --cap-add=SYS_ADMIN lxc-build:phantomjs-test

lxc.conf

lxc.arch = x86_64
lxc.rootfs.path = /home/tester
lxc.uts.name = phantom_container
lxc.idmap = u 0 1000 65536
lxc.idmap = g 0 1000 65536
lxc.pty.max = 1
lxc.tty.max = 1
lxc.execute.cmd = phantomjs

lxc-выполнить

/home/tester # XDG_RUNTIME_DIR='' lxc-execute --name bork -f /home/tester/default.conf -l TRACE -o okay.log

след

/home/tester # cat okay.log 
    INFO     lxc_confile - confile.c:set_config_idmaps:1575 - Read uid map: type u nsid 0 hostid 1000 range 65536
    INFO     lxc_confile - confile.c:set_config_idmaps:1575 - Read uid map: type g nsid 0 hostid 1000 range 65536
    TRACE    lxc_commands - commands.c:lxc_cmd_init:1323 - Creating abstract unix socket "/usr/local/var/lib/lxc/bork/command"
    TRACE    lxc_start - start.c:lxc_init_handler:563 - Unix domain socket 4 for command server is ready
    TRACE    lxc_start - start.c:lxc_init:578 - initialized LSM
    TRACE    lxc_start - start.c:lxc_init:584 - read seccomp policy
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to STARTING
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered
    TRACE    lxc_start - start.c:lxc_init:591 - set container state to "STARTING"
    TRACE    lxc_start - start.c:lxc_init:619 - set environment variables
    TRACE    lxc_start - start.c:lxc_init:625 - ran pre-start hooks
    DEBUG    lxc_start - start.c:setup_signal_fd:278 - Set SIGCHLD handler with file descriptor: 5.
    TRACE    lxc_start - start.c:lxc_init:636 - set up signal fd
    DEBUG    console - console.c:lxc_console_peer_default:513 - using "/dev/tty" as peer tty device
    DEBUG    console - console.c:lxc_console_signal_init:178 - Created signal fd 9
    DEBUG    console - console.c:lxc_console_winsz:86 - Set window size to 204 columns and 59 rows
    TRACE    lxc_start - start.c:lxc_init:643 - created console
    TRACE    lxc_conf - conf.c:lxc_ttys_shift_ids:2870 - chowned console "/dev/pts/1"
    TRACE    lxc_start - start.c:lxc_init:649 - shifted tty ids
    INFO     lxc_start - start.c:lxc_init:651 - container "bork" is initialized
    DEBUG    storage - storage/storage.c:storage_query:252 - Detected rootfs type "dir"
    INFO     lxc_cgroup - cgroups/cgroup.c:cgroup_init:67 - cgroup driver cgroupfs initing for bork

    # I've been really focused on this error
    ERROR    lxc_cgfs - cgroups/cgfs.c:lxc_cgroupfs_create:901 - Could not find writable mount point for cgroup hierarchy 13 while trying to create cgroup.


    ERROR    lxc_start - start.c:lxc_spawn:1245 - Failed creating cgroups.
    DEBUG    lxc_network - network.c:lxc_delete_network:3123 - Deleted network devices
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to ABORTING
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered
    ERROR    lxc_start - start.c:__lxc_start:1503 - Failed to spawn container "bork".
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to STOPPING
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to STOPPED
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered

Я пытаюсь контейнеризировать один исполняемый файл и начинаю задумываться, не стоит ли мне использовать только cgroups, поскольку вся эта история с контейнерами в контейнерах кажется немного запутанной.

tester@04de411cd0fe:~$ cat /proc/1/cgroup

13:name=systemd:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
12:pids:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
11:hugetlb:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
10:net_prio:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
9:perf_event:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
8:net_cls:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
7:freezer:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
6:devices:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
5:memory:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
4:blkio:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
3:cpuacct:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
2:cpu:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
1:cpuset:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f

В каких случаях systemd нужно монтировать как доступный для записи? Почему lxc/systemd будет искать меня для монтирования systemd?

tester@04de411cd0fe:~$ mount | grep cgroup

tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cpuset on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct)
blkio on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
memory on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
devices on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
freezer on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
net_cls on /sys/fs/cgroup/net_cls type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls)
perf_event on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
net_prio on /sys/fs/cgroup/net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_prio)
hugetlb on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
pids on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)


/home/tester # cat /proc/cgroups

#subsys_name    hierarchy   num_cgroups enabled
cpuset  1   22  1
cpu 2   22  1
cpuacct 3   22  1
blkio   4   22  1
memory  5   23  1
devices 6   22  1
freezer 7   22  1
net_cls 8   22  1
perf_event  9   22  1
net_prio    10  22  1
hugetlb 11  22  1
pids    12  22  1

Я пробовал использовать образы docker для ubuntu 17.04, 16.04 и alpine:latest, все с теми же результатами. Я пробовал использовать lxc 2.07, 2.08 и 2.1.1, в основном с теми же результатами.

В процессе обучения мне удалось устранить похожие ошибки:

  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 4 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 5 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 6 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 7 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 8 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 9 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 10 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 11 при попытке создания cgroup
  • Не удалось найти доступную для записи точку монтирования для иерархии cgroup 12 при попытке создания cgroup

Думаю, я решил проблему монтирования стандартной иерархии cgroup для первых 12 методов, используя 2 разных метода, но 13-й по какой-то причине не работает:

  1. mount -t cgroup cpuset -o cpuset /sys/fs/cgroup/cpuset/
  2. cd project && mkdir -p sys/fs/cgroup/{net_prio,pids,hugetlb,freezer,cpuset,cpu,devices,perf_event,memory,cpuacct,net_cls,blkio} # а затем использовать rootfs или конфигурацию типа mount.entry

Еще немного информации по теме:

cat /etc/*-релиз

3.6.2
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.6.2
PRETTY_NAME="Alpine Linux v3.6"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"

uname -a

Linux 8fd6247b5665 4.9.60-linuxkit-aufs #1 SMP Mon Nov 6 16:00:12 UTC 2017 x86_64 Linux

lxc-execute --version

2.1.0-devel

версия докера

Version 17.11.0-ce-mac40 (20561)
Channel: edge
d8fd0f1f4a

Насколько тесно связаны эти запросы на включение изменений:

Некоторые связанные с этим мысли/вопросы заключались в том, что мне не следует использовать контейнеры в контейнерах, а следует просто использовать полноценную виртуальную машину (это не решает проблему удобства использования).

  • Я могу попробовать перекомпилировать systemd?
  • может быть, что-то связано с параметрами загрузки ядра?
  • может быть, я использую неправильные версии cgroupv1 и cgroupv2?
  • Можно ли отключить попытки монтирования иерархий cgroup?
  • Связано ли это с тем, как docker выполняет /sbin/init и запускает начальное пространство имен cgroup?

Любая помощь будет высоко оценена.

Также возможно связано:

Итак, я провел еще несколько исследований и нашел эту информацию, которая содержит дополнительную информацию о начальном материале cgroup cgfs, возможно, связанном с name=systemd:

/home/tester # cat /usr/share/doc/lxcfs/README.Debian
...
/home/tester # cat /usr/share/pam-configs/cgfs

Name: Create cgroups for user login sessions
Default: yes
Priority: 0
Session-Type: Additional
Session:
    optional    pam_cgfs.so -c freezer,memory,name=systemd


/home/tester # cat /etc/pam.d/common-session

session [default=1]         pam_permit.so
session requisite           pam_deny.so
session required            pam_permit.so
session optional            pam_umask.so
session required    pam_unix.so 
session optional    pam_systemd.so 
session optional    pam_cgfs.so -c freezer,memory,name=systemd

Связанный контент