docker容器挂载权限问题 导致日志文件不生成
1、出现问题
新项目采用springboot2.3之后的自带打包方式打包成功后,启动发现目录文件里面没有日志生成
logs
文件路径下没有日志生成。
docker-compose.yaml
目录挂载如下:
version: "3"
services:dedupe:image: XXXcontainer_name: dedupeenvironment:- TZ=Asia/Shanghai- LANG=zh_CN.UTF-8- JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8ports:- 8082:8082volumes:- ./config:/workspace/config- ./logs:/workspace/logsrestart: always
日志相关配置
logging:file:name: logs/application.loglevel:com.gildata: INFOlogback:rollingpolicy:max-file-size: 100MBmax-history: 10
2、发现问题
检查外部所有配置文件没有问题之后,进入容器内部查看日志文件是否生成
docker exec -it 容器id /bin/bash
查看对应容器内部日志文件生成路径是是否存在日志文件
drwxr-xr-x. 1 cnb cnb 32 Feb 3 13:22 ./
drwxr-xr-x. 1 root root 48 Feb 3 13:22 ../
drwxr-xr-x. 1 cnb cnb 60 Jan 1 1980 BOOT-INF/
drwxr-xr-x. 3 cnb cnb 80 Jan 1 1980 META-INF/
drwxr-xr-x. 2 root root 35 Feb 3 13:22 config/
drwxr-xr-x. 2 root root 29 Feb 3 13:22 logs/
drwxr-xr-x. 3 cnb cnb 29 Jan 1 1980 org/
发现logs 下面确实没有日志文件生成,但是config下面的配置文件是外部成功的映射进来了。
同时发现,config 和logs 2个路径的用户都是root,而其他的辣眼睛都是 cnb
用户。初步怀疑是路径权限问题,导致日志没有写进去,但是config由于是读操作,所以没有问题。
3、解决问题
更改映射的2个路径的权限,重新生成启动容器
chown -R 1000:1000 config/
chown -R 1000:1000 logs/
发现日志可以正常生成,宿主机中也出现了日志。同时容器内部的权限正常
drwxr-xr-x. 1 cnb cnb 32 Feb 3 13:22 ./
drwxr-xr-x. 1 root root 48 Feb 3 13:22 ../
drwxr-xr-x. 1 cnb cnb 60 Jan 1 1980 BOOT-INF/
drwxr-xr-x. 3 cnb cnb 80 Jan 1 1980 META-INF/
drwxr-xr-x. 2 cnb cnb 35 Feb 3 13:22 config/
drwxr-xr-x. 2 cnb cnb 29 Feb 3 13:22 logs/
drwxr-xr-x. 3 cnb cnb 29 Jan 1 1980 org/
4、问题原因
错误的原因是,docker-compose启动的时候会分别在容器和宿主机上创建目录,在宿主机上是使用docker进程来创建目录的,默认使用的角色是root,目录挂载的时候会把这个用户同步到容器里面的目录,所以容器里面logs目录权限也是root,但是容器里面的应用是使用cnb用户来运行的,当然没有往logs目录里面写的权限,所以就报错了;因为这两个角色是会同步的,所以解决的办法就是修改宿主机的日志权限为docker里面用户的权限;可以使用如下命令修改宿主机日志目录的权限:
chown -R 1000:1000 对应路径
当然这是一个快速的解决方案,一劳永逸的话,可以在打包的时候权限相关的操作,使用root用户将容器中的logs目录赋权限为cnb
docker容器挂载权限问题 导致日志文件不生成相关推荐
- Docker容器挂载
docker的理念:将应用和环境打包成一个镜像!通过镜像启动容器运行 问题:在容器中存储的程序数据是需要持久化的,不能容器删了数据也随之删除.比如,安装一个MySQL容器,在其中存储了大量数据,结果把 ...
- Docker 容器挂载摄像头并显示图像
Docker本身的工作模式是命令行的,但有时候我们需要在Docker容器里运行一些图形化东西如:调用摄像头,输出图像等等,这个时候我们就不得不研究一下如何在Docker中进行 "可视化&qu ...
- 解决Docker容器没有权限写入宿主机目录
在应用docker容器的时候,更多的时候我们会把宿主机的目录挂载到docker容器中. 在宿主机的文件夹权限隶属于root时,我们需要将文件夹的权限用户进行 chown 设置,才能保证目录的内容的正常 ...
- Docker容器和本机之间的文件传输
2019独角兽企业重金招聘Python工程师标准>>> 主机和容器之间传输文件的话需要用到容器的ID全称. 获取方法如下: 1.先拿到容器的短ID或者指定的name. 2.然后根据这 ...
- Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出
一.目的 a.快速把原有fastapi代码部署到docker,让docker在server运行. b.不涉及docker深入设置. c.使用python第三方lib少或简单. 二.步骤 ps:请提前安 ...
- 在docker容器里,ffmpeg给视频文件内嵌字幕文件,不生效,如何解决?
用ffmpeg命令,发现执行成功,但视频文件就是没有字幕.看不出问题出现在什么地方.后来直接用ffmpeg添加水印命令测试,发现是缺少字体文件,如下图所示: 报Fontconfig error: Ca ...
- linux创建data文件夹权限,权限不足导致数据文件夹 data/ 创建失败
与 #59 有关. 现在, B4X 会将用户数据存储在程序所在目录下.如果程序运行目录不可写,创建data/目录的操作将会失败(报错"无法为配置创建目录"),进而在之后需要对dat ...
- 宿主机docker容器互传文件命令
docker ps查看运行中的docker容器id 最前面这一列container id就是了,真实的id比这个要长,但使用这个短的就行了,也是唯一的. docker容器往宿主机传文件 docker ...
- 利用 ELK 搭建 Docker 容器化应用日志中心
概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志收集. 本文即将阐述如何利用ELK日志中心来收集容器化 ...
最新文章
- Effective Java之对可恢复的情况使用受检异常,对编程错误使用运行时异常(五十八)
- 在navicat中新建数据库
- storyboard搭建项目_swift项目第五天:swift中storyBoard Reference搭建主界面
- 罗永浩欲直播带货,京东说可以帮忙联系
- 主板有电无法启动_主板通电但不能启动怎么回事
- 数据库学mysql python_mysql学习(4)python操作数据库
- ffmpeg之YUV420P转RGB24
- 弄懂 JRE、JDK、JVM 之间的区别与联系
- opencv cv::Mat::convertTo()函数
- 综述---图像处理中的注意力机制
- outlook2016修改服务器,Outlook 2016 pop3 设置
- Vuejs中字符串判空处理--如何判断字符串是否为空或不为空
- Github+Jekyll —— 创建个人免费博客(四)jekyll第一个页面
- python程序 爱意_情人节到了,隔离在家的你还不快用Python给你的她表达下爱意?...
- c语言程序实现进程的管道通信,C 进程间通信--命名管道通信代码实现及其原理图示...
- 思科vrrp实例_Cisco 交换机 vrrp+mstp 配置实例
- linux怎样保存文件,linux不能保存文件如何解决
- 在Linux上搭建nim服务器安装AIX
- 华为鸿蒙系统朋友圈扩大,华为发力全屋智能新赛道,能弥补手机下滑留下的空缺吗?...
- 怎么选择好的CCD视觉检测?