Docker中获取root【所有 | 指定】权限


Docker中获取root【所有 | 指定】权限)

问题抛出

Docker容器中执行 date -s 2019-09-02 01:01:01 命令时,报出如下错误:
date: cannot set date: Operation not permitted

解决思路

经查询了解到,docker容器的资源隔离使用了Linux宿主机的Capability机制,而Capability机制允许我们显示的将root的权限划分为不同的小的单元。默认情况下,docker容器中只支持如下Capability:

CHOWN, 
DAC_OVERRIDE, 
FSETID, 
FOWNER, 
MKNOD, 
NET_RAW, 
SETGID,  
SETUID, 
SETFCAP, 
SETPCAP, 
NET_BIND_SERVICE, 
SYS_CHROOT, 
KILL, 
AUDIT_WRITE

修改系统时钟需要用到 SYS_TIME 权限。

解决方案

①、一刀切,直接通过--privileged赋予全部最高权限

A) docker 命令行启动方式下,配置–privileged,范例:

[root@localhost ~]# docker run -it --privileged --name mycentos centos:latest /bin/bash

B) docker-compose.yml下,在service_name->app_name下配置:

privileged: true

②、仅通过--cap-add赋予时钟修改权限

A) docker 命令行启动方式下,范例:

[root@localhost ~]# docker run -it --cap-add SYS_TIME --rm --name mycentos centos:lastest /bin/bash

B) docker-compose.yml下,在service->app_name下配置:

#添加SYS_TIME能力
cap_add:
  - SYS_TIME

# 添加全部能力
cap_add:
  - ALL

# 删除NET_ADMIN,SYS_ADMIN能力
cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

参考列表,致谢

1: https://www.jianshu.com/p/3cfd7e4d8c76
2: https://docs.docker.com/compose/compose-file/

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐