Я пытаюсь установить системное время внутри док-контейнера¹.
Я подумал, что для достижения этого мне просто нужно добавить возможность SYS_TIME
:
$ docker run --cap-add SYS_TIME -it ubuntu:16.04 /bin/bash
root@50007999ec5e:/# date --set "+2 hours"
date: cannot set date: Operation not permitted
Thu Jan 1 2:00:00 UTC 1970
К сожалению, это не работает. В поисках похожих ошибок я обнаружил предположения, что, возможно, AppArmor блокирует системный вызов, поэтому я попытался добавить --security-opt apparmor:unconfined
, но, увы, безуспешно:
$ docker run --security-opt apparmor:unconfined --cap-add SYS_TIME -it ubuntu:16.04 /bin/bash
root@c4d923009bab:/# date --set "+2 hours"
date: cannot set date: Operation not permitted
Thu Jan 1 2:00:00 UTC 1970
Что должно означать, что AppArmor не является здесь виноват.
Очевидно, что запуск контейнера с использованием --privileged
работает:
$ docker run --privileged -it ubuntu:16.04 /bin/bash
root@35ef33342149:/# date --set "+2 hours"
Thu Jan 1 2:00:00 UTC 1970
Но весь смысл того, что я пытаюсь сделать, - это экспериментировать с опциями и возможностями безопасности докера. Я что-то здесь упускаю? Можете ли вы предложить, как отладить и исправить эту проблему?
¹ Да. Я знаю, что системное время не является ресурсом пространства имен.