CentOS系统中Docker权限设置指南
Docker守护进程默认通过Unix域套接字(/var/run/docker.sock)通信,该文件的属主为root、属组为docker。通过将用户添加到docker组,可赋予其无需sudo执行Docker命令的权限。
sudo groupadd docker
$USER替换为实际用户名(如john),执行:sudo usermod -aG docker $USER
注:
-aG表示追加用户到指定组,避免移除原有组权限。
su - $USER
docker run hello-world,若输出Hello from Docker!则表示权限设置成功。通过-v参数将宿主机目录映射到容器内,可控制容器对宿主机文件的访问范围(如仅允许读取或写入特定目录):
docker run -v /host/safe/path:/container/target/path my-image
示例:将宿主机的
/data目录映射到容器的/app/data,容器内只能操作/app/data下的文件。
使用--privileged=true参数赋予容器几乎等同于宿主机的权限(可访问所有设备、修改内核参数),但会严重降低安全性,仅用于调试或特殊场景:
docker run -it --privileged=true centos /bin/bash
通过--cap-add(添加能力)和--cap-drop(移除能力)参数,细化容器权限(如仅允许管理网络或挂载文件系统):
# 添加网络管理能力
docker run -d --cap-add NET_ADMIN --name network-demo my-image
# 移除所有能力(仅保留必要能力)
docker run -d --cap-drop ALL --cap-add CHOWN my-image
若系统启用SELinux(默认开启),可能会限制容器对宿主机资源的访问(如挂载目录)。需通过以下命令调整策略:
sudo yum install policycoreutils-python
/host/path替换为实际宿主机目录(如/data),执行:sudo semanage fcontext -a -t httpd_sys_rw_content_t "/host/path(/.*)?"
sudo restorecon -Rv /host/path
注:
httpd_sys_rw_content_t为允许读写的SELinux类型,可根据需求替换为svirt_sandbox_file_t(容器文件系统)等类型。
若需限制对Docker守护进程端口(默认2375/tcp,用于远程访问)的访问,可通过firewalld或iptables配置:
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="2375" accept'
sudo firewall-cmd --reload
sudo yum update docker-ce docker-ce-cli containerd.io更新Docker,修复安全漏洞。