当前位置:首页>Linux>《Linux普通用户如何赋予更改Docker配置文件的权限》

《Linux普通用户如何赋予更改Docker配置文件的权限》

  • 2026-08-24 10:52:56
《Linux普通用户如何赋予更改Docker配置文件的权限》

Linux普通用户如何赋予更改Docker配置文件的权限

用户没有sudo权限,但已经加入Docker组,有运行docker权限。有时要修改docker配置文件方便拉取镜像,这就需要修改配置文件,权限最小化原则,在不给sudo权限的情况下赋予相应权限的方法。

第一步:备份当前配置创建daemon.d目录

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

第三步:赋予用户或Docker组有重启Docker权限

# 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会提示)

第四步:重启 Docker 并验证

# 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

第五步:故障排查(如果 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 在启动时会:

  1. 1. 首先检查 /etc/docker/daemon.json
  2. 2. 然后自动扫描 /etc/docker/daemon.json.d/ 目录
  3. 3. 加载所有 .json 文件并合并配置

配置优先级:

  1. 1. 如果 /etc/docker/daemon.json存在,Docker 会忽略整个/etc/docker/daemon.json.d/目录,确保使用目录方式时,单文件不存在或清空daemon.json内容
  2. 2. 文件命名:.json文件按字母顺序加载,建议使用数字前缀控制顺序
  3. 3. 配置合并:同一配置项在多个文件中,最后加载的生效
  4. 4. 重启生效:修改配置后必须重启 Docker:

最新文章

随机文章