容器以特权启动的方式有哪些
时间: 2023-11-25 09:16:12 浏览: 20
常见的容器特权启动方式包括:
1. NET_ADMIN 权限启动:该权限允许容器修改主机的网络配置,包括 iptables 配置和其他网络相关配置。
2. SYS_ADMIN 权限启动:该权限允许容器操作主机的大部分系统资源,例如挂载文件系统、调整内存限制、修改系统时间等。
3. SYS_MODULE 权限启动:该权限允许容器加载内核模块,包括第三方内核模块,可以在一定程度上提供更大的灵活性。
4. DAC_OVERRIDE 权限启动:该权限允许容器忽略访问控制规则,直接访问主机的任意文件或目录,需要十分小心使用。
请注意,特权启动容器可以提供更高的灵活性和控制能力,但也会增加主机安全性的风险,必须谨慎评估和使用。
相关问题
普通用户可以特权方式启动docker容器吗?docker run --privileged
默认情况下,只有 root 用户才能使用 `--privileged` 参数启动 Docker 容器,因为该参数会让容器拥有访问宿主机系统资源的特权。如果使用普通用户启动容器,会提示权限不足的错误。
不过,您可以通过配置 Docker 守护进程来允许普通用户启动特权容器。具体来说,您需要将普通用户添加到 `docker` 用户组中,并将 Docker 守护进程配置为允许该用户组的成员使用特权容器。
具体操作步骤如下:
1. 将普通用户添加到 `docker` 用户组中:
```
sudo usermod -aG docker your_username
```
其中,`your_username` 是您要添加到 `docker` 用户组中的用户名。
2. 编辑 Docker 配置文件 `/etc/docker/daemon.json`,配置容器运行时的默认参数:
```
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"runcmd": [
"/usr/sbin/sysctl -w kernel.perf_event_paranoid=-1"
],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"iptables": true,
"ipv6": true,
"userns-remap": "default",
"experimental": true,
"features": {
"buildkit": true
},
"group": "docker"
}
```
其中,`group` 参数设置为 `docker`,表示允许属于 `docker` 用户组的成员使用 Docker。
3. 重新启动 Docker 守护进程:
```
sudo systemctl daemon-reload
sudo systemctl restart docker
```
4. 使用普通用户身份启动特权容器:
```
docker run --privileged -it bcc-image
```
现在,普通用户已经可以使用特权容器了。需要注意的是,使用特权容器会增加安全风险,需要谨慎使用。
Docker swarm 如何开启特权容器
要在Docker Swarm中启用特权容器,需要在Docker服务的启动参数中添加`--privileged`选项。可以通过以下步骤实现:
1. 停止当前的Docker服务:`sudo systemctl stop docker`
2. 编辑Docker daemon配置文件:`sudo vi /etc/docker/daemon.json`
3. 在该文件中添加以下内容:
```
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
"swarm-default-advertise-addr": "eth0",
"live-restore": true,
"userland-proxy": false,
"iptables": false,
"cgroup-parent": "/",
"experimental": true,
"insecure-registries": ["myregistry.example.com:5000"],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"metrics-addr": "0.0.0.0:9323",
"debug": true,
"experimental": true,
"default-address-pools": [
{"base":"10.0.0.0/8","size":24}
]
}
```
4. 启动Docker服务,并将其设置为在系统启动时自动启动:`sudo systemctl start docker && sudo systemctl enable docker`
5. 在Swarm中启动特权容器时,使用以下命令:
```
docker service create \
--name myservice \
--mode global \
--mount type=bind,source=/host/path,destination=/container/path \
--privileged \
myimage
```
在上面的命令中,`--privileged`选项用于启用特权模式,`myservice`是服务名称,`myimage`是特权容器所使用的镜像。你还可以使用`--mount`选项将主机上的目录挂载到容器中。