如何将docker run的--cap-add权限参数写入Dockerfile实现自动生效
自动化配置Docker容器权限参数的实现方案
- 方案1:使用Docker Compose固化启动参数
将所有运行参数写进docker-compose.yml配置文件,无需每次手动输入,配置示例如下:
version: '3' services: ubuntu-gnome: image: darkdragon001/ubuntu-gnome-vnc container_name: ubuntu-gnome detach: true rm: true tmpfs: - /run - /run/lock - /tmp cap_add: - SYS_BOOT - SYS_ADMIN volumes: - /sys/fs/cgroup:/sys/fs/cgroup ports: - "5901:5901" - "6901:6901"
后续启动容器仅需执行docker compose up -d,停止容器执行docker compose down即可,所有配置会自动加载。
- 方案2:封装Shell启动脚本
适合轻量使用场景,将完整启动命令写入独立脚本文件,操作流程如下:
- 新建
start_ubuntu_gnome.sh文件,写入以下内容:
#!/bin/bash sudo docker run --name=ubuntu-gnome -d --rm \ --tmpfs /run --tmpfs /run/lock --tmpfs /tmp \ --cap-add SYS_BOOT --cap-add SYS_ADMIN \ -v /sys/fs/cgroup:/sys/fs/cgroup \ -p 5901:5901 -p 6901:6901 \ darkdragon001/ubuntu-gnome-vnc
- 给脚本添加执行权限:
chmod +x start_ubuntu_gnome.sh - 后续启动直接执行
./start_ubuntu_gnome.sh即可。
- 方案3:配置Systemd服务单元(适合需要开机自启的场景)
如果需要容器随系统开机自动运行,可以把参数写入systemd服务配置,操作流程如下:
- 新建配置文件
/etc/systemd/system/ubuntu-gnome.service,写入以下内容:
[Unit] Description=Ubuntu Gnome VNC Container After=docker.service Requires=docker.service [Service] Restart=always ExecStart=/usr/bin/docker run --name=ubuntu-gnome --rm \ --tmpfs /run --tmpfs /run/lock --tmpfs /tmp \ --cap-add SYS_BOOT --cap-add SYS_ADMIN \ -v /sys/fs/cgroup:/sys/fs/cgroup \ -p 5901:5901 -p 6901:6901 \ darkdragon001/ubuntu-gnome-vnc ExecStop=/usr/bin/docker stop ubuntu-gnome [Install] WantedBy=multi-user.target
- 执行
systemctl daemon-reload加载配置 - 启动服务执行
systemctl start ubuntu-gnome,设置开机自启执行systemctl enable ubuntu-gnome
注意:
SYS_ADMIN属于高权限capability,仅在你完全信任所用镜像的场景下使用,避免带来安全风险。
内容的提问来源于stack exchange,提问作者Nipun Sharma
相关产品推荐
相关产品推荐

