为了能使容器内的SpringBoot项目的日志方便查看,我想用容器卷挂载的方式,将容器内生成的日志文件挂载到服务器上,实现同步,即使生成了新的镜像,依赖于compose file的配置,也能使日志在服务器上同意的位置生成,这样就比较方便了;

1. SpringBoot的配置文件

application.yml

logging:level:ROOT: INFOtech.jhipster: DEBUGorg.hibernate.SQL: DEBUGcn.mycompany.app: DEBUGlogback:rollingpolicy:max-file-size: 50MB # 一个日志文件的最大值,只配置这个,会在生成一个日志文件达到50MB的时候,对这个文件进行打包,打成.gz后缀的包,或者按日期生成,比如23:59分是一个包,第二天0:01又是一个包,因为是SpringBoot,所以约定了很多规则file:path: /tmp/logs # 生成日志的路径

2. compose file 文件配置

compose-file.yml

version: '2'
services:cms服务名:image: 192.168.1.1:8084/cms:1.1.1镜像名container_name: 容器名volumes:- /test/logs:/tmp/logs #挂载配置 宿主机目录:容器目录

3. 在项目目录下运行命令:

 mvn clean package -Dmaven.test.skip=true -Pprod -DskipTests jib:dockerBuild  -DsendCredentialsOverHttp=true

打包成功得到一个docker镜像

[INFO] Built image to Docker daemon as 192.168.1.1:8084/cms:1.1.1镜像名

4.push到镜像仓库

docker push 192.168.1.1:8084/cms:1.1.1镜像名

5.用compose file 构建容器

因为是本地仓库,所以不需要用docker pull拉取,在存放compose-file的目录下执行命令:

docker-compose -f  compose-file.yml up -d

-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)

-d 以守护进程启动

如果成功了,就会构建容器并启动,如果提示有容器存在了,可以考虑把之前那个同名容器删了再构建;

6.启动后在控制台查看日志可以用指令:

查看最新的100条

docker logs -f --tail 100 容器名称

7.进入容器中 查看日志是否生成

docker exec -it -u root 容器名称 /bin/bash

进去就可以用Linux指令;
可以省略 -u root ,这样在容器中就是普通用户
进入容器中查看是否为root用户,可以输入指令

root@c8da365db18a:/tmp/logs# whoami
root
root@c8da365db18a:/tmp/logs#

8.如果项目启动时报错

2021-09-11 02:02:15.257 ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failedjava.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/spring.log (Permission denied)at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:327)at ...

是因为容器内没有权限,容器内默认是用普通用户来操作的;如果没显示(Permission denied)也很可能是因为容器内权限不够导致无法创建文件夹或者文件,亲测! 看如下文章,说容器内是最好不要用root用户的:
请注意,出于安全目的,在容器内以 root 身份运行是最糟糕的做法。Dockerfile 应始终使用 USER 指令从而避免直接使用 root 权限。

9.那么如何给容器内的文件夹加上权限呢?

由于本人对Linux和docker的粗浅认识,所以不会写docker file和compose file,只能依葫芦画瓢,看了一些别的yml,但是也没能幸运得偿所愿;
最后发现解决办法就是通过容器卷挂载,在docker compse file那里确定挂载目录,先实现挂载, 再到宿主机(服务器)上输入指令给宿主机(服务器)上的文件给权限,这样容器内的映射的文件夹也就给上权限了;

指令: chmod -R 777 /test/logs
-R 是让logs目录底下所有文件夹和文件全都有权限;友情提示谨慎使用777这条指令;

然后你就发现权限问题被解决了;挂载也实现了;这样就完成了我们的需求;

10.ps

我用的容器,默认/tmp目录就有,且有很高的权限;
SpringBoot默认生成日志就是在/tmp目录底下,所以拿这个文件为突破口;
可以参考jhipster生成项目的logback-spring.xml的日志配置文件,在SpringBoot的依赖包里看到点东西

如果你没用jhipster,可以查看我上传的文件logback.xml

docker使用docker compose file部署项目时,实现容器卷挂载,并对容器内文件夹赋予权限相关推荐

  1. Jenkins部署项目时,git报错fatal: index file smaller than expected

    @Jenkins部署项目时,git报错fatal: index file smaller than expectedTOC 最近在学习部署Jenkins时,微服务构建一直报错: Caused by: ...

  2. mysql 5.6升级8.0_Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法...

    MysqL数据库版本从5.6.28升到8.0.11过程中部署项目时遇到的问题和解决方法,具体介绍如下所示: 首先这个项目用到了hibernate4.2.0,链接MysqL5.6.28没问题,换到8.0 ...

  3. python项目部署失败的原因_python – 使用scrapyd部署项目时出错

    我的项目文件夹中有多个蜘蛛,想要一次运行所有的蜘蛛,所以我决定使用scrapyd服务运行它们. 我已经开始通过看到 here来做到这一点 首先,我在当前项目文件夹中 >我打开了scrapy.cf ...

  4. Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法

    这篇文章主要介绍了Mysql数据库从5.6.28版本升到8.0.11版本过程中遇到的问题及解决方法,解决办法有三种,每种方法给大家介绍的都很详细 mysql数据库版本从5.6.28升到8.0.11过程 ...

  5. VB6.0编写的程序,安装时系统提示:安装程序无法创建以下文件夹:%CommonFiles%\Microsoft Shared\DAO...

    VB6.0编写的程序,安装时系统提示:安装程序无法创建以下文件夹:%CommonFiles%\Microsoft Shared\DAO 解决:将对应文件的"安装到"目录从:%Com ...

  6. docker实战之Dockerfile构建部署项目(三)

    Dockerfile 基本命令 一.[实战一下]使用Docker构建jdk1.8镜像 1. 将jdk-8u141-linux-x64.tar.gz包下载到本地,然后用ftp传入Linux. 2. 新建 ...

  7. 讲义六 之 docker 搭建测试环境以及部署项目包 created by 爱软测_bill

    讲义六 之 docker 搭建cms测试环境 created by 爱软测_bill 最简洁的总结命令: STEP-0 部署流程预知 [安装docker-->使用docker 拉取Tomcat容 ...

  8. AndroidStudio部署项目时出现错误:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled

    结果在部署项目到模拟器的时候出现了错误:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled 原因 ...

  9. PyCharm/IDEA等工具使用git时设置不要提交系统文件,或者忽略提交文件夹

    一.在PyCharm/IDEA等工具中安装.ignore插件忽略不必要提交的文件 在使用Pycharm或者 IDEA时,git提交项目到本地仓库的时候,会把类似下面代码提交,不要将多余的代码提交,类似 ...

最新文章

  1. xgboost 正则项_XGBoost入门系列第一讲
  2. SELECT语句“加锁选项”功能说明
  3. 美团取消支付宝支付引关注,称饿了么也不支持微信支付,饿了么回应绝了
  4. 软件测试入门随笔——软件测试基础知识(一)
  5. matlab2c使用c++实现matlab函数系列教程-compan函数
  6. Zabbix监控之检测程序日志中错误发生的次数
  7. AndroidStudio 文件目录如何“刷新”
  8. php 滑块 爬虫_php中强大爬虫工具querylist
  9. MySQL全局锁库锁表
  10. 猪悟能论坛看贴工具(Discuz!7版) v1.0
  11. 计算机职业生涯测评,皮纹检测职业版——职业生涯规划指南测评系统
  12. 下血本买的!1-3年的Android开发工程师看过来,挥泪整理面经
  13. Ribbon与Hystrix
  14. 最全前端资源---快过来 最新鲜的资源这里都有
  15. asp.net mvc 项目使用Quartz.net添加定时任务
  16. 分享5个宝藏小网站,工作学习都能用到
  17. php限定符实例,PHP正则表达式限定符说明
  18. 入门了解学hybris和sap的需要内容(自己整理)
  19. melis系统c800_Dell bilgisayarda HDMI bağlantı noktasıyla ilgili Sık Sorulan Sorular (SSS)
  20. gc java ibm_gc分析工具(IBM Pattern Modeling and Analysis Tool for Java Garbage Collector)

热门文章

  1. 软考__BS家族_WBS_OBS_RBS
  2. 好用的Web前端开发框架有哪些呢?推荐这9款
  3. kubelet启动pod源码分析(三)
  4. Java基础9----运算符2(关系,逻辑运算符)
  5. 组合体视图的画图步骤_§5-2 画组合体视图的方法与步骤—叠加型组合体的视图画法...
  6. RabbitMQ下载安装
  7. 嵌入式软考备考_8 软件测试
  8. taobao tt 配置
  9. 保护个人隐私,你需要这样设置 iPhone 的语音备忘录,禁用位置命名
  10. 5个免费好用的在线工具推荐,让你的工作效率提升百倍!