問題
ChromeOS の 69.0.3473.0
あたりから, Docker を chrostini で動かそうとするとこんなことを言われてしまう
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"could not create session key: function not implemented\"": unknown.
対症療法
Chrome 上で Ctl+Alt+T
で crosh を呼び出し,
crosh> vmc start termina
(termina) chronos@localhost ~ $ lxc profile unset default security.syscalls.blacklist
(termina) chronos@localhost ~ $ lxc profile apply penguin default
(termina) chronos@localhost ~ $ lxc restart penguin
として,terminal を再起動すると治る.ただ,penguinが起動するたびにやり直さなければいけないために相当めんどくさい.以下に書かれているようにバージョンアップを待つしかなさげだ.
https://bugs.chromium.org/p/chromium/issues/detail?id=860565
(2018-09-20)追記:
以下で永続化できるようだ
lxc profile unset default security.syscalls.blacklist
lxc profile copy default newprofile
lxc profile apply penguin default,newprofile
lxc restart penguin
gVisor
エラーはコンテナのランタイム runc
で起こっている.そこで,このランタイムを google 謹製の gVisor
で置き換えるという手がある.
https://github.com/google/gvisor
以下のように導入
wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc
wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc.sha512
sha512sum -c runsc.sha512
chmod a+x runsc
sudo mv runsc /usr/local/bin
etc/docker/daemon.json
に以下のように記述
{
"runtimes": {
"runsc": {
"path": "/usr/local/bin/runsc"
}
}
}
して, sudo systemctl restart docker
でサービスを再起動すると,
docker run --runtime=runsc hello-world
みたいにして使える.デフォルトにしたかったら, daemon.json に
"default-runtime": "runsc"
を加えて以下のようにしてみるとよいだろう.ただしこの方法は,nvidia-docker とかとは共生できないかもしれない.
{
"runtimes": {
"runsc": {
"path": "/usr/local/bin/runsc"
}
},
"default-runtime": "runsc"
}