Docker:容器修改时间问题
一、问题:docker exec -it ID date -s "2012-08-12 10:30:22"异常,date: cannot set date: Operation not permitted。
二、原因
由于docker容器的隔离是基于Linux的Capability机制实现的, Linux的Capability机制允许你将超级用户相关的高级权限划分成为不同的小单元. 目前Docker容器默认只用到了以下的Capability.
CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD, NET_RAW, SETGID, SETUID, SETFCAP, SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE
三、 解决方案:增加–cap-add SYS_TIME参数
- docker run
# docker run -it --cap-add SYS_TIME -p 80:80 -v data:/data -d nginx:latest
# docker exec -it 61f82153eaba date -s "2012-08-12 10:30:22"
Sun Aug 12 10:30:22 UTC 2012
- docker-compose.yml
version: '3'
services:
nginx_web:
image: nginx:latest
cap_add:
- SYS_TIME