我一直在尝试使用Docker,最近我遇到了一个问题:无法提取容器内服务的日志文件目录。
我的Dockerfile如下:
ENV HOME=/software/service
ENV LOGS=$HOME/logs
COPY Service.jar $HOME/Service.jar
WORKDIR HOME
CMD java -jar Service.jar
我为此创建了一个存根服务,它只是在
LOGS
环境变量中创建日志文件名为log.log
并每2秒写入其中。我想要实现的目标是备份docker linux主机上的
log.log
文件。经过一些关于多个选项的阅读后,我发现了2种流行的持久化数据解决方案:1.使用
docker run -v
选项的卷。
2.创建保存数据的数据容器。选项2对我来说没有太大帮助,因为我想在我的linux主机机器中查看日志,所以我选择了选项1。
选项1的问题在于,它创建具有
root
权限的日志文件,这意味着我必须登录为root才能删除这些日志,这可能会导致问题,因为不是每个人都应该拥有root用户,并且删除日志是经常发生的事情。因此,我再次仔细阅读并找到了许多“解决方法”来解决此问题,其中之一是将我的
/etc/group
和/etc/passwd
文件挂载到docker中,并使用-u
选项,其他解决方法也类似于此。我的主要问题是,是否有任何方便和标准的解决此问题的方法,可以使用/不使用
-v
选项来提取日志文件,并让整个组拥有rwx
权限。谢谢!
docker run -ti \ -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro \ -u $( id -u $USER ):$( id -g $USER ) \ my-image:lastest
也许我漏掉了什么? - user6209005Dockerfile
中指定为 /software/service/logs,但是为什么我不能创建它呢? - user6209005RUN mkdir -p /software/service/logs && chmod 777 /software/service/logs
,或者选择用户主目录内的一个目录(默认情况下应该是可写的,无需chown)来进行写操作。 - whites11docker exec ls -l /software/service/logs
时),因为java -jar Service.jar
正在创建该文件夹,而该命令是由我的用户运行的。 - user6209005