
私は pppd を実行しようとしている Docker コンテナを持っています。ホスト カーネルには がありますCONFIG_PPP=y
。次のように ppp デバイスを設定しています。
mkdir /run/container/dev
mknod /run/container/dev c 108 0
... add some more devices here ...
次に、 のボリューム マウントを使用してコンテナを起動します/run/container/dev:/dev
。 コンテナは で実行され--privileged
、コンテナ内のプロセスは root として実行されます。
コンテナ内で pppd を実行しようとすると失敗します。
/ # pppd
Couldn't open the /dev/ppp device: Operation not permitted
pppd: Sorry - this system lacks PPP kernel support
strace
問題は、EPERM
開こうとしたときに発生することを示唆しています/dev/ppp
:
openat(AT_FDCWD, "/dev/ppp", O_RDWR|O_LARGEFILE) = -1 EPERM (Operation not permitted)
getpid() = 76
sendto(3, "<27>Jul 14 09:55:08 pppd[76]: Co"..., 89, 0, NULL, 0) = -1 ENOTCONN (Socket not connected)
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 12) = -1 EPROTOTYPE (Protocol wrong type for socket)
write(1, "Couldn't open the /dev/ppp devic"..., 58Couldn't open the /dev/ppp device: Operation not permitted) = 58
write(1, "\n", 1
) = 1
writev(2, [{iov_base="pppd: Sorry - this system lacks "..., iov_len=52}, {iov_base=NULL, iov_len=0}], 2pppd: Sorry - this system lacks PPP kernel support
) = 52
getpid() = 76
sendto(3, "<27>Jul 14 09:55:08 pppd[76]: So"..., 75, 0, NULL, 0) = -1 ENOTCONN (Socket not connected)
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 12) = -1 EPROTOTYPE (Protocol wrong type for socket)
exit_group(4) = ?
ここで何が欠けているのでしょうか?
答え1
最終的に、これは--device-cgroup-rule="c 108:0 rwm"
docker コマンドラインで必要であることが判明しました。