Docker コンテナ内で Telegraf を動かして、Docker の情報を収集するには /var/run/docker.sock
をマウントする必要がありますが、それだけでは以下のように Got permission denied
のエラーが表示されました。
E! [inputs.docker] Error in plugin: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info": dial unix /var/run/docker.sock: connect: permission denied
E! [inputs.docker] Error in plugin: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?filters=%7B%22status%22%3A%7B%22running%22%3Atrue%7D%7D&limit=0": dial unix /var/run/docker.sock: connect: permission denied
Telegraf の 1.20.3 以降、Telegraf の実行ユーザーは telegraf
という非 root ユーザーに変わったらしいです。
なので、Telegraf の実行ユーザーが docker コマンドを実行できるように、以下のように user
を指定する必要があるそうです。
$ docker run --user telegraf:$(stat -c '%g' /var/run/docker.sock) ...
docker-compose の場合
yml 内ではシェル変数を参照できないので、あらかじめ環境変数を設定しておくなど、少し工夫が必要です。
$ export TELEGRAF_UID_GID=telegraf:$(stat -c '%g' /var/run/docker.sock)
docker-compose.yml
で環境変数を参照します。
user: ${TELEGRAF_UID_GID}
ここらへんについては以下の記事が参考になると思います。