Runnig docker作为具有--user $ {id -u的nonRoot不能创建/ var / lib /

问题描述

您好,我对docker来说还很陌生,我正在尝试启动并运行influxdb和grafana。

我已经解决了一些问题,希望能在同一页面上给出一些摘要

  1. here获得了一个docker-compose文件
  2. sudo docker-compose up -d
  3. 遇到了问题,容器未应用诸如INFLUXDB_DB = db0之类的参数来放置docker-compose.yml。因此,例如,未创建数据库db0。
  4. 对容器的更改虽然会持续存在。所以我可以创建一个数据库,重新启动后它仍然存在
  5. 使用docker run将每个容器测试为独立容器
  6. 弄清楚了我是否使用绑定安装代替了适用于influxdb的docker卷
  7. grafana容器无法启动
sudo docker run --volume "$PWD/data:/var/lib/grafana" -p 3000:3000 grafana/grafana:latest
GF_PATHS_DATA='/var/lib/grafana' is not writable.
You may have issues with file permissions,more @R_824_4045@ion here: http://docs.grafana.org/installation/docker/#migration-from-a-prevIoUs-version-of-the-docker-container-to-5-1-or-later
mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied
  1. 阅读here,如果我想将绑定安装与grafana一起使用,请务必使用$(id -u)定义用户
  2. 做到了这一点,但随后用户无权创建 / var / lib / grafana 目录
 sudo docker run --user $(id -u) --volume "$PWD/data:/var/lib/grafana" -p 3000:3000 grafana/grafana:latest
GF_PATHS_DATA='/var/lib/grafana' is not writable.
You may have issues with file permissions,more @R_824_4045@ion here: http://docs.grafana.org/installation/docker/#migration-from-a-prevIoUs-version-of-the-docker-container-to-5-1-or-later
mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied
  1. 当我将--user参数设置为0:0时,它可以工作,但是我读到一些最佳实践,其中以root身份运行可以进行测试,但是对于生产来说则不理想。
  2. 我还读到我可以将用户添加到docker组以向该用户授予权限
  3. 我的系统上没有docker组,因此我读了here,可以创建一个,然后通过/etc/docker/daemon.json将docker.socket添加到该组中,但是该文件不存在,并且我无法创建它,我想我已经在兔子洞深处停了下来,问我是否走错了方向,做错了什么。

我想我的主要问题是如何以非root身份启动容器,而又不给它们太多权限。

使用: 发行人ID:Ubuntu 说明:Ubuntu 18.04.4 LTS 发行:18.04 代号:bionic

解决方法

我记得很早以前就在处理类似的问题。

我推荐

一次

mkdir data/grafana

然后

sudo docker run --volume "$PWD/data:/var/lib" -p 3000:3000 grafana/grafana:latest

因为我记得每当您批量安装某些东西时,它都会被root拥有。无法更改已挂载卷的所有权。

但是您可以更改装入的卷内文件和目录的所有权,并且它们不必是root。

因此,在我的解决方案中,您只是将数据装载到/ var / lib,/ var / lib将由root拥有,而/ var / lib / grafana将由常规用户拥有。

这显然会隐藏/ var / lib目录中任何其他文件夹的内容,但是那里可能没有什么重要的内容。如果可以,则可以将程序配置为在其他位置查找/ var / lib / grafana。例如,/ srv / grafana然后将调用更改为

sudo docker run --env GRAFANA_DIR=/srv/grafana --volume "$PWD/data:/srv" -p 3000:3000 grafana/grafana:latest

最后,我不明白为什么以root身份运行会带来安全问题。 我不确定我是否同意这一点。