활성화하려고 합니다.Docker의 사용자 네임스페이스. 물론 이를 위해서는 커널에서 사용자 네임스페이스를 활성화해야 합니다.
RHEL/CentOS에서 사용자 네임스페이스를 활성화하는 단계 중 하나는 다음과 같습니다.
echo "user.max_user_namespaces=15000" >> /etc/sysctl.conf
max_user_namespaces는 기본적으로 0이기 때문입니다. 그런 다음 재부팅하거나 실행하여 sysctl -p
sysctl.conf의 sysctl 설정을 로드해야 합니다. 설정이 로드되면 /proc/sys/user/max_user_namespaces
15000이 포함되어야 합니다. 이는 RHEL 7.4(커널: 3.10.0-957.10.1.el7.x86_64)에서 제대로 작동합니다.
그리고 sysctl -p
. 그러나 재부팅하면 max_user_namespaces가 다시 0으로 설정됩니다.
systemd-sysctl 서비스의 상태를 확인하여 active (exited)
상태가 있는지 확인했습니다.
● systemd-sysctl.service - Apply Kernel Variables
Loaded: loaded (/usr/lib/systemd/system/systemd-sysctl.service; static; vendor preset: disabled)
Active: active (exited) since Wed 2019-04-03 16:15:34 WEST; 16s ago
Docs: man:systemd-sysctl.service(8)
man:sysctl.d(5)
Process: 2786 ExecStart=/usr/lib/systemd/systemd-sysctl (code=exited, status=0/SUCCESS)
Main PID: 2786 (code=exited, status=0/SUCCESS)
Apr 03 16:15:34 localhost.localdomain systemd[1]: Starting Apply Kernel Variables...
Apr 03 16:15:34 localhost.localdomain systemd[1]: Started Apply Kernel Variables.
자세히 조사한 결과 systemd-sysctl 서비스가 시작될 때마다 다음에 쓰려고 할 때 '권한 거부' 오류로 인해 서비스가 실패하는 것으로 나타났습니다 /proc/sys/user/max_user_namespaces
.
$ journalctl -xn
[...]
Apr 03 16:15:34 localhost.localdomain sudo[2779]: user : TTY=tty1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/systemctl start systemd-sysctl
Apr 03 16:15:34 localhost.localdomain polkitd[763]: Registered Authentication Agent for unix-process:2780:7181831 (system bus name :1.51 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
Apr 03 16:15:34 localhost.localdomain systemd[1]: Starting Apply Kernel Variables...
-- Subject: Unit systemd-sysctl.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit systemd-sysctl.service has begun starting up.
Apr 03 16:15:34 localhost.localdomain systemd-sysctl[2786]: Failed to write '15000' to '/proc/sys/user/max_user_namespaces': Permission denied
Apr 03 16:15:34 localhost.localdomain systemd[1]: Started Apply Kernel Variables.
-- Subject: Unit systemd-sysctl.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit systemd-sysctl.service has finished starting up.
--
-- The start-up result is done.
Apr 03 16:15:34 localhost.localdomain polkitd[763]: Unregistered Authentication Agent for unix-process:2780:7181831 (system bus name :1.51, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
파일 권한은 다음과 같습니다(RHEL 및 CentOS 모두에서).
$ ls -l /proc/sys/user/max_user_namespaces
-rw-r--r--. 1 root root 0 Apr 3 10:10 /proc/sys/user/max_user_namespaces
앞서 말했듯이 sysctl -p
sudo를 사용하거나 직접 편집하여 변경할 수 있습니다. systemd-sysctl 서비스가 여기에 쓸 수 없는 이유는 무엇입니까?
RHEL에서도 똑같은 일이 작동한다는 점에 유의하세요. 문제가 무엇인지 전혀 모르고 어디에서도 답을 찾을 수 없습니다. 있다이것질문이 있지만 아직 답변이 없습니다.
어떤 아이디어가 있나요?