Docker目录挂载
一 初接触
刚接触一个项目,让我管理一下日志模块,决定使用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 命令查看正在运行的容器的信息
2 进入容器:docker exec -it f880d4b4964f bash,网上很多最后面用的是/bin/bash,我用的时候报错,最后是从stack overflow上面找到了解决办法,改用bash。
3 找到你自己在logback中设置的目录,查看日志是否生成
4 发现有日志生成,找到自己设置的宿主机挂载目录,检查宿主机挂载的目录是否有一模一样的日志文件:
发现有对应的日志文件
推荐阅读
-
在centos7 中docker info报错docker bridge-nf-call-iptables is disabled 的解决方法
-
docker操作命令大全和后台参数
-
Docker 限制容器可用的CPU的方式
-
详解基于Harbor搭建Docker私有镜像仓库
-
Docker 1分钟搭建DNS服务器的方法
-
docker挂载NVIDIA显卡运行pytorch的方法
-
docker利用WebHook实现持续集成
-
使用docker -v 和 Publish over SSH插件实现war包自动部署到docker的操作步骤
-
详解Apache配置多个监听端口和不同的网站目录
-
Docker如何限制容器可用的内存