
Soweit ich verstehe, verweist Hierarchie 13 auf „name=systemd“. Ich habe versucht, ein einigermaßen einfaches lxc-execute in einer Docker-Entwicklungsumgebung mit Folgendem auszuführen:
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-ausführen
/home/tester # XDG_RUNTIME_DIR='' lxc-execute --name bork -f /home/tester/default.conf -l TRACE -o okay.log
verfolgen
/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
Ich habe versucht, eine ausführbare Datei in einen Container zu packen und frage mich allmählich, ob ich vielleicht einfach nur Cgroups verwenden sollte, da mir diese ganze Sache mit den Containern in den Containern etwas verwirrend erscheint.
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
In welchen Fällen müsste systemd als beschreibbar gemountet werden? Warum würde lxc/systemd nach mir suchen, um systemd zu mounten?
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
Ich habe versucht, Docker-Images für Ubuntu 17.04, 16.04 und Alpine:latest zu verwenden, alle mit den gleichen Ergebnissen. Ich habe versucht, lxc 2.07, 2.08 und 2.1.1 zu verwenden, größtenteils mit den gleichen Ergebnissen.
Während meines Lernprozesses konnte ich ähnliche Fehler beheben:
- Beim Versuch, die Kontrollgruppe zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Kontrollgruppenhierarchie 4 gefunden werden.
- Beim Versuch, die Kontrollgruppe zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Kontrollgruppenhierarchie 5 gefunden werden.
- Beim Versuch, die Kontrollgruppe zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Kontrollgruppenhierarchie 6 gefunden werden.
- Beim Versuch, die Cgroup zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Cgroup-Hierarchie 7 gefunden werden.
- Beim Versuch, die Cgroup zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Cgroup-Hierarchie 8 gefunden werden.
- Beim Versuch, die Kontrollgruppe zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Kontrollgruppenhierarchie 9 gefunden werden.
- Beim Versuch, die Cgroup zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Cgroup-Hierarchie 10 gefunden werden.
- Beim Versuch, die Cgroup zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Cgroup-Hierarchie 11 gefunden werden.
- Beim Versuch, die Cgroup zu erstellen, konnte kein beschreibbarer Einhängepunkt für die Cgroup-Hierarchie 12 gefunden werden.
Ich glaube, ich habe das Problem mit der Standardmontage der Cgroup-Hierarchie für die ersten 12 mithilfe von zwei unterschiedlichen Methoden gelöst, aber 13 funktioniert aus irgendeinem Grund nicht:
- mount -t cgroup cpuset -o cpuset /sys/fs/cgroup/cpuset/
- cd project && mkdir -p sys/fs/cgroup/{net_prio,pids,hugetlb,freezer,cpuset,cpu,devices,perf_event,memory,cpuacct,net_cls,blkio} # und dann Verwendung von rootfs oder einer Konfiguration vom Typ mount.entry
Weitere relevante Informationen:
Katze /etc/*-Freigabe
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
Docker-Version
Version 17.11.0-ce-mac40 (20561)
Channel: edge
d8fd0f1f4a
Wie eng sind diese Pull Requests verwandt:
Einige damit verbundene Gedanken/Fragen waren, dass ich keine Container in Containern verwenden sollte und einfach eine vollständige VM verwenden sollte (löst das Problem der Benutzerfreundlichkeit nicht).
- Ich könnte versuchen, systemd neu zu kompilieren?
- Vielleicht hat es etwas mit den Kernel-Boot-Parametern zu tun?
- Vielleicht verwende ich die falschen Versionen von cgroupv1 und cgroupv2?
- Ist es möglich, den Versuch zum Mounten von Cgroup-Hierarchien zu deaktivieren?
- Hat dies etwas damit zu tun, wie Docker /sbin/init ausführt und den anfänglichen Cgroup-Namensraum startet?
Für jede Hilfe wäre ich sehr dankbar.
Möglicherweise auch damit verbunden:
- welchen Unterschied zwischen /sys/fs/cgroup/systemd/ und /sys/fs/cgroup/xxx/
- https://stackoverflow.com/questions/29378051/inconsistent-runtime-kernel-parameters-in-docker-container-and-on-host
- https://github.com/systemd/systemd/issues/6092
- https://github.com/lxc/lxc/issues/1489#issuecomment-289971237
- https://github.com/moby/moby/issues/10176
Nach einigen weiteren Recherchen habe ich außerdem diese Informationen gefunden, die weitere Informationen zu anfänglichem Cgroup-CGFS-Zeug enthalten, möglicherweise in Bezug auf 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