以非root用户身份提取Docker容器中的日志文件

我一直在玩docker一段时间,我有一个问题提取在容器内运行的服务的日志文件目录。

我的Dockerfile看起来像这样:

ENV HOME=/software/service ENV LOGS=$HOME/logs COPY Service.jar $HOME/Service.jar WORKDIR HOME CMD java -jar Service.jar 

我为此创build了一个存根服务,他所做的就是在LOGS环境variables中创build日志文件名log.log ,并每隔2秒写入一次。

我想实现的是在我的log.log linux主机中备份log.log文件。 经过一些关于多个选项的阅读后,我发现了两个stream行的解决scheme来保存数据:

  1. 通过docker run -v选项使用卷
  2. 创build一个容纳数据的数据容器

选项2在这里没有什么帮助,因为我想查看我的linux主机中的日志,所以我select了选项1。

选项1的问题是它创build具有root权限的日志,这意味着我必须login到根才能够删除这些日志,当不是每个人都应该拥有root用户并且发生删除日志时会导致问题常用。

所以我多读了一些,并find了许多解决这个问题的方法,其中一个是在docker中挂载我的/etc/group/etc/passwd文件,并使用-u选项,其他类似于此。

我的主要问题是,有没有这个问题的任何方便和标准的解决scheme,使用/不带-v选项提取日志文件,同时让整个组权限rwx它。

谢谢!

既然你想要日志在你的主机,你需要某种forms的音量共享,“-v”标志绝对是你可以做的最简单的事情。

根据权限问题,我看到两个选项:

  1. 你提到的passwd / group bindmounting的-u标志
  2. 传递所需的用户名和组ID作为环境variables,并使得在Docker机器中运行的守护程序在创build时更新文件(但当然这并不总是可行)。

我认为选项1虽然棘手,但最容易应用。

另一个select是简单地将日志复制到主机:

 docker cp <container-name>:/software/service/logs .