欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker目录挂载

程序员文章站 2022-06-16 22:50:37
...

一 初接触

        刚接触一个项目,让我管理一下日志模块,决定使用logback。

     在本地环境(win7)下,运行微服务可以logback按照预期的样子执行,日志级别,滚动方式都很正确,但是我到开发环境(CentOS7)一看,没有生成日志文件。

       于是百度,全部说的都是log4j的jar包冲突,导致我在这边路上走了很远。。

       然后我在本地搭了一个虚拟机,直接用java -jar 的方式运行微服务,发现日志文件生成正常。

       那么我本地的虚拟机和开发环境唯一的区别是开发环境用了docker。

       于是我用了一条命令 find / -name 'log的文件名' -type d

       发现其实日志都是正常生成了,只是他跑到了别的地方。

二 发现问题

       日志发现了以后,一周后发现每次重新部署开发环境的时候,以前日志文件会消失,了解到只要是容器内的数据,当容器删除或者重启时,以前的数据就会消失,于是搜索问题发现的解决的方法是Docker目录挂载。就是在从镜像启动容器的时候,用-v的命令,将容器里的目录和宿主机的一个目录关联起来,容器里面目录里面的内容如果修改了,宿主机挂载的目录里面的内容也会跟着修改,而且当容器被删除时,宿主机里面的数据不会消失。

      在logback中的配置的日志目录为/usr/local/src/logs,所以在启动的时候将容器的这个目录挂载到宿主机随便哪个目录:

docker run -it -v /usr/local/src/logs:/usr/local/src/logs test/base:1.0.0 /bin/bash

-v命令后面,冒号前边为宿主机目录,后面为容器目录(容器目录指的是我们使用命令进入到容器内的目录,而不是我们用FileZilla直接看到的目录),且必须为绝对路径,也就是要以 / 开头。test/base:1.0.0是镜像的名称和标签。

或者直接在Dockerfile文件中加上一句:VOLUME  usr/local/src/logs ,但是这样会挂载到docker的volumn/*/usr/local/src/logs目录下,而不是宿主机的/usr/local/src/logs目录下。

三 检查

1 运行容器成功以后,用docker ps 命令查看正在运行的容器的信息

Docker目录挂载

2 进入容器:docker exec -it f880d4b4964f bash,网上很多最后面用的是/bin/bash,我用的时候报错,最后是从stack overflow上面找到了解决办法,改用bash。

Docker目录挂载

3 找到你自己在logback中设置的目录,查看日志是否生成

Docker目录挂载

4 发现有日志生成,找到自己设置的宿主机挂载目录,检查宿主机挂载的目录是否有一模一样的日志文件:

Docker目录挂载

发现有对应的日志文件