You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署Telegraf访问docker.sock的权限问题求助

问题描述

更新尝试

我参考相关方案修改Docker Compose配置如下:

telegraf3:
  image: telegraf
  user: telegraf:$$(stat -c '%g' /var/run/docker.sock)    
  volumes:
    - ./telegraf/telegraf3.conf:/etc/telegraf/telegraf.conf
    - /var/run/docker.sock:/var/run/docker.sock

但启动时报错:

Error response from daemon: unable to find group $(stat -c '%g' /var/run/docker.sock): no matching entries in group file

背景

我通过Docker Compose部署带Docker输入插件的Telegraf,初始配置如下:

telegraf3:
  image: telegraf
  volumes:
    - ./telegraf/telegraf3.conf:/etc/telegraf/telegraf.conf
    - /var/run/docker.sock:/var/run/docker.sock:rw
  env_file:
    - ./telegraf/telegraf.env
  depends_on:
    - influxdb

运行时出现权限错误:

test-grafana-telegraf3-1  | 2022-12-29T12:09:10Z E! [inputs.docker] Error in plugin: Got permission denied while trying to connect to the Docker daemon socket at unix:///docker.sock: Get "http://%2Fdocker.sock/v1.24/info": dial unix /docker.sock: connect: permission denied

本质原因是Telegraf以telegraf用户运行,该用户没有访问docker.sock的权限。

其他尝试及报错

我还尝试修改command字段配置:

telegraf3:
  image: telegraf
  volumes:
    - ./telegraf/telegraf3.conf:/etc/telegraf/telegraf.conf
    - /var/run/docker.sock:/var/run/docker.sock:rw
  env_file:
    - ./telegraf/telegraf.env
  depends_on:
    - influxdb
  command: ["bash -c -u telegraf $$(stat -c '%g' /var/run/docker.sock)", "/entrypoint.sh"]

但启动后报错:

test-grafana-telegraf3-1  | setpriv: failed to execute bash -c -u telegraf $(stat -c '%g' /var/run/docker.sock): No such file or directory

容器以退出码127终止。

解决方案

方法1:直接指定Docker组ID

Docker Compose的user字段不会解析Shell命令,需先在宿主机执行以下命令获取docker.sock的组ID:

stat -c '%g' /var/run/docker.sock

得到结果(例如999)后,直接写入Compose配置:

telegraf3:
  image: telegraf
  user: telegraf:999  # 替换为你获取到的组ID
  volumes:
    - ./telegraf/telegraf3.conf:/etc/telegraf/telegraf.conf
    - /var/run/docker.sock:/var/run/docker.sock:rw
  env_file:
    - ./telegraf/telegraf.env
  depends_on:
    - influxdb

方法2:容器启动时动态添加权限

通过自定义entrypoint,在容器启动时将telegraf用户加入与docker.sock同组的用户组:

telegraf3:
  image: telegraf
  volumes:
    - ./telegraf/telegraf3.conf:/etc/telegraf/telegraf.conf
    - /var/run/docker.sock:/var/run/docker.sock:rw
  env_file:
    - ./telegraf/telegraf.env
  depends_on:
    - influxdb
  entrypoint: ["bash", "-c", "DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) && groupadd -g $DOCKER_GID docker-access && usermod -aG docker-access telegraf && exec /entrypoint.sh"]

逻辑说明:

  1. 获取docker.sock的组ID
  2. 创建对应GID的用户组
  3. 将telegraf用户加入该组
  4. 执行原entrypoint脚本启动Telegraf

方法3:构建自定义Telegraf镜像

若需长期复用,可构建自定义镜像预先配置权限:
Dockerfile(./telegraf-custom/Dockerfile):

FROM telegraf
RUN DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) && groupadd -g $DOCKER_GID docker-access && usermod -aG docker-access telegraf

Compose配置:

telegraf3:
  build: ./telegraf-custom
  volumes:
    - ./telegraf/telegraf3.conf:/etc/telegraf/telegraf.conf
    - /var/run/docker.sock:/var/run/docker.sock:rw
  env_file:
    - ./telegraf/telegraf.env
  depends_on:
    - influxdb

内容的提问来源于stack exchange,提问作者Max Krog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:43:52