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

时间:2017-08-30 06:55:56

标签: docker

我已经和码头工人玩了一段时间了,我在解压缩容器内运行的服务的日志文件目录时遇到了问题。

我的Dockerfile如下所示:

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

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

我想要实现的是备份我的docker linux主机中的log.log文件。在阅读了一些关于多个选项的内容之后,我遇到了两种流行的数据持久解决方案:

  1. 使用具有docker run -v选项
  2. 的卷
  3. 创建保存数据的数据容器
  4. 选项2在这里没有多大帮助,因为我想查看我的linux主机内的日志,所以我选择了选项1.

    选项1的问题是它创建了具有root权限的日志,这意味着我必须登录到root才能删除这些日志,这可能会导致问题而不是每个人应该有root用户,删除日志是常见的事情。

    所以我读了一点,找了很多"解决问题"对于这个问题,有人将我的/etc/group/etc/passwd文件放在docker中并使用-u选项,其他文件与此类似。

    我的主要问题是,针对此问题是否有任何方便和标准的解决方案,在使用/ -v选项的情况下提取日志文件,同时让整个组权限rwx

    谢谢!

2 个答案:

答案 0 :(得分:0)

由于您希望日志位于主机中,因此您需要某种卷共享和" -v" flag绝对是你能做的最简单的事情。

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

  1. 您提及的passwd / group bindmounting的-u标志
  2. 将所需的用户名和组ID作为环境变量传递,并使得在docker机器上运行的守护程序在创建时chown该文件(当然,这并不总是可行)。
  3. 我认为选项1虽然棘手,但最容易应用。

答案 1 :(得分:0)

另一种选择是简单地将日志复制到主机:

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