以非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来保存数据:
- 通过
docker run -v
选项使用卷 - 创build一个容纳数据的数据容器
选项2在这里没有什么帮助,因为我想查看我的linux主机中的日志,所以我select了选项1。
选项1的问题是它创build具有root
权限的日志,这意味着我必须login到根才能够删除这些日志,当不是每个人都应该拥有root用户并且发生删除日志时会导致问题常用。
所以我多读了一些,并find了许多解决这个问题的方法,其中一个是在docker中挂载我的/etc/group
和/etc/passwd
文件,并使用-u
选项,其他类似于此。
我的主要问题是,有没有这个问题的任何方便和标准的解决scheme,使用/不带-v
选项提取日志文件,同时让整个组权限rwx
它。
谢谢!
既然你想要日志在你的主机,你需要某种forms的音量共享,“-v”标志绝对是你可以做的最简单的事情。
根据权限问题,我看到两个选项:
- 你提到的passwd / group bindmounting的
-u
标志 - 传递所需的用户名和组ID作为环境variables,并使得在Docker机器中运行的守护程序在创build时更新文件(但当然这并不总是可行)。
我认为选项1虽然棘手,但最容易应用。
另一个select是简单地将日志复制到主机:
docker cp <container-name>:/software/service/logs .
- 在docker图像上运行具有KeyCloak的Wild Sw群
- “在jpeg上找不到头文件或库文件”在Alpine Linux上安装Pillow
- 来自守护程序的错误响应:validation根CA证书时出错:x509:证书已过期或尚未生效
- -p标志是否覆盖EXPOSE?
- 容器在HOSTnetworking中运行时如何configurationmarathon-lb?
- 如何使用docker remote api创build容器在java中?
- Django&WordPress的 – wp-adminredirect问题
- sonatype nexus docker音量错误
- 在Docker容器中更改非命名空间的内核参数