用户没有sudo权限,但已经加入Docker组,有运行docker权限。有时要修改docker配置文件方便拉取镜像,这就需要修改配置文件,权限最小化原则,在不给sudo权限的情况下赋予相应权限的方法。
Docker 支持从目录加载配置,可以创建所属docker组可写的文件夹,这样属于docker组的普通用户就可以在daemon.d目录下编辑创建配置文件。
# 1.1 备份当前配置
sudocp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d-%H%M%S)
# 1.2 查看当前配置
cat /etc/docker/daemon.json
# 输出应该是:
# {
# "data-root": "/mnt/data/docker",
# "registry-mirrors": [
# "https://docker.m.daocloud.io",
# "https://docker.ustc.edu.cn",
# "https://hub-mirror.c.163.com",
# "https://dockerproxy.com"
# ],
# "insecure-registries": ["harbor.test.com"]
# }
# 1.3 创建配置daemond.d目录,设置所有者=root,所属组=docker并赋予775权限
sudomkdir -p /etc/docker/daemon.d
sudochown root:docker /etc/docker/daemon.d
sudochmod 775 /etc/docker/daemon.d
# 1.4 清空原有的 daemon.json
sudoecho'{}' > /etc/docker/daemon.json
# 或者完全删除(Docker 会使用默认值)
# sudo rm /etc/docker/daemon.json# 2.1 将现有配置拆分成多个文件
# 2.1.1 创建 data-root 配置文件
sudo tee /etc/docker/daemon.json.d/00-data-root.json << 'EOF'
{
"data-root": "/mnt/data/docker"
}
EOF
# 2.1.2 创建 registry-mirrors 配置文件
sudo tee /etc/docker/daemon.json.d/10-registry-mirrors.json << 'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://dockerproxy.com"
]
}
EOF
# 2.1.3 创建 insecure-registries 配置文件
sudo tee /etc/docker/daemon.json.d/20-insecure-registries.json << 'EOF'
{
"insecure-registries": ["harbor.test.com"]
}
EOF
# 2.2 查看创建的文件
ls -la /etc/docker/daemon.json.d/
# 应该看到:
# 00-data-root.json
# 10-registry-mirrors.json
# 20-insecure-registries.json# 1. 编辑sudoers文件
sudo visudo
# 2. 在文件末尾添加(确保在正确的节)
# 在 "User privilege specification" 部分后添加如下为单个user1用户有重启docker权限:
user1 ALL=(ALL) NOPASSWD: /bin/systemctl restart docker
#或修改配置(给docker组所有成员):
%docker ALL=(ALL) NOPASSWD: /bin/systemctl restart docker
# 3. 保存退出(如果语法错误,visudo会提示)# 4.1 重新加载 systemd 配置(如果使用选择B)
sudo systemctl daemon-reload
# 4.2 重启 Docker
sudo systemctl restart docker
# 4.3 检查 Docker 状态
sudo systemctl status docker
# 4.4 验证配置是否生效
sudo docker info | grep -A 5 "Registry Mirrors"
sudo docker info | grep "Insecure Registries"
sudo docker info | grep "Docker Root Dir"
# 应该显示:
# Registry Mirrors:
# https://docker.m.daocloud.io/
# https://docker.ustc.edu.cn/
# https://hub-mirror.c.163.com/
# https://dockerproxy.com/
# Insecure Registries:
# harbor.test.com
# Docker Root Dir: /mnt/data/docker# 5.1 查看 Docker 日志
sudo journalctl -u docker.service -n 100 --no-pager
# 5.2 测试配置文件语法
sudo apt-get install -y jq # 如果没安装 jq
for file in /etc/docker/daemon.json.d/*.json; do
echo "检查: $file"
jq empty "$file" && echo " ✓ 语法正确" || echo " ✗ 语法错误"
done
# 5.3 手动测试 Docker 启动
sudo dockerd --debug --config-file=/etc/docker/daemon.json.d/
# 5.4 恢复方案:如果目录方式失败,回到单文件方式
sudo cp /etc/docker/daemon.json.backup.* /etc/docker/daemon.json
sudo rm -f /etc/systemd/system/docker.service.d/use-config-dir.conf
sudo systemctl daemon-reload
sudo systemctl restart docker因为 Docker 在启动时会:
/etc/docker/daemon.json/etc/docker/daemon.json.d/ 目录.json 文件并合并配置配置优先级: