docker容器挂载权限问题 导致日志文件不生成

您所在的位置:网站首页 docker日志配置 docker容器挂载权限问题 导致日志文件不生成

docker容器挂载权限问题 导致日志文件不生成

2023-08-01 04:01| 来源: 网络整理| 查看: 265

1、出现问题

新项目采用springboot2.3之后的自带打包方式打包成功后,启动发现目录文件里面没有日志生成 在这里插入图片描述 logs 文件路径下没有日志生成。 docker-compose.yaml 目录挂载如下:

version: "3" services: dedupe: image: XXX container_name: dedupe environment: - TZ=Asia/Shanghai - LANG=zh_CN.UTF-8 - JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 ports: - 8082:8082 volumes: - ./config:/workspace/config - ./logs:/workspace/logs restart: always

日志相关配置

logging: file: name: logs/application.log level: com.gildata: INFO logback: rollingpolicy: max-file-size: 100MB max-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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3