容器在启动时重定向日志文件的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器在启动时重定向日志文件的方法相关的知识,希望对你有一定的参考价值。
* 在启动时重定向日志的方法
1. 背景介绍:将java程序部署到容器中时,通常通过java - jar命令进行启动,这个方式输入的日志在控制台。如果要将该命令输出的日志重定向到容器中的某个文件中,必须通过自定义启动脚本写明重定向的文件名才行
2. 错误做法:
1. 比如通过Dockerfile文件的CMD命令或者ENTRYPOINT命令指定文件名,这些方法都不行,因为在Dockerfile文件中指定的文件名在容器执行CMD或者ENTRYPOINT命令时,容器并不认为这个文件是它自己的,严格来说这个文件应该是属于宿主机的
2. 在docker run命令中直接用 > 进行重定向也不行,道理一样,因为该重定向文件还是属于宿主机的
3. 正确做法:
1. 修改基础镜像,比如centos7.0,新建启动脚本,比如root.sh,脚本内容:
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/default-jvm/
export PATH=$JAVA_HOME/bin:$PATH
nohup /usr/lib/jvm/default-jvm/bin/java -Djava.security.egd=file:/dev/./urandom -jar $1 >dockerlog.txt ($1:传入的要执行的文件 dockerlog.txt:容器中重定向文件名)
2. 修改root.sh的权限为777
chmod 777 run.sh
3. 保存提交基础镜像:比如:docker commit 容器ID 镜像名:镜像版本号
4. 业务镜像继承该基础镜像,而且启动命令指定root.sh
FROM common_wfj_jdk1.8:1.0 基础镜像
VOLUME /tmp
#文件拷贝
ADD ./target/gdcrm-tag-client-0.0.1.jar gdcrm-tag-client.jar
#启动后执行命令
ENTRYPOINT ["/root/run.sh", "/gdcrm-tag-client.jar"] 指定启动脚本以及传入参数
#暴露端口
EXPOSE 8761
5. 业务镜像启动: docker run -tid 镜像名:镜像版本号
以上是关于容器在启动时重定向日志文件的方法的主要内容,如果未能解决你的问题,请参考以下文章
使用Laravel 5.7中的Auth激活用户会话时重定向到页面的方法
.NET 实现启动时重定向程序运行路径及 Windows 服务运行模式部署