Nginx 发布 Docker 运行日志的方法
2023-09-27 14:24:14 时间
背景
公司这边想进行容器化负载均衡部署.
脚本很简单, 已经实现了, 但是发现我这边没有ELK也没有LOKI
又不太像切入到容器内部进行 获取日志信息.
所以我这边想了一个别的招来动态刷新日志.
思路
动态获取容器的日志目录
然后将目录动态替换到 nginx的autoindex的路径下.
然后重启一下nginx, 使用新的配置文件进行加载日志进行展示.
获取容器日志目录
这边部署的镜像是一直一个相同的名字. 跟端口号绑定: 所以我这边优先获取一个镜像的目录
docker inspect --format='{{.LogPath}}' app5201 |xargs dirname
命令比较简单, 主要是json格式的获取信息内容.
注意注意的是 一开始获取出来的是 log的文件, 通过 dirname 的方式获取到
文件具体的目录进行替换.
修改nginx配置文件以及启动
sed "s#applog#`docker inspect --format='{{.LogPath}}' aoo5201 |xargs dirname`#" /opt/nginx/applog.conf >/opt/nginx/appdockerlog.conf
cd /opt/nginx/
lsof -i:8080|awk '{print $2}' |xargs kill -9
./nginx -c appdockerlog.conf
简单讲解
1. sed 进行变量替换的时候 建议使用 soft quote, 这样的话就可以直接识别变量了.
需要注意的是 变量替换时不建议使用 / 进行切分了
建议换用 # 类似的符号进行切分, 因为 目录里面带 / 会导致命令失败.
可以先定义变量, 可以在 ## 之间 添加`` 反引号包裹的命令来实现.
2. 注意sed -i 会修改当前文件, 会导致丢失模板, 所以建议从模板文件修改到其他目录里面去.
这样命令可以重复使用.
3. 监控 端口, 停止 nginx的服务
4. 重启nginx服务
nginx 文件预览的模板
worker_processes 1;
user root;
events {
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
charset utf8;
gzip on;
server {
listen 8080;
server_name localhost;
location / {
root applog/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
}
nginx配置文件说明
建议增加 user root;的处理
容器的目录权限 nobody可能不好获取, 贸然修改容器的目录权限不太好.
建议在被替换的目录的末尾添加一个 / 这样的话 替换完 dirname 之后就正常可用了.
相关文章
- WSL2:安装CentOS7(或任何你想安装的Linux发行版)【方法①:利用docker拉镜像,再导出】【方法②:直接利用CentOS-WSL安装包】
- Docker 持续集成过程中的性能问题及解决方法
- 在 Scale Up 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(145)
- ARM平台安装Docker的方法
- docker 查询镜像并删除
- Docker 网络不通的解决方法
- Docker for windows pull镜像文件的安装位置改变方法
- docker 查询或获取私有仓库(registry)中的镜像
- 使用docker Maven插件本地构建docker镜像并发布到远程服务器
- 【Docker】MySQL容器因为内存限制启动失败?
- Docker 使用指南 —— 基本操作
- 【实战】基于Nginx、Node.js和Redis的Docker工作流
- Linux Docker 配置阿里云镜像加速的方法
- 清理掉所有停止运行的docker容器
- Windows下构建Node.js的Docker Nano Server基础镜像
- 内置编排工具且适用于生产环境的Docker 1.12 GA了!
- 通俗理解docker
- centos7安装docker
- Docker 平台基本使用方法
- 【云原生】Docker仓库详细讲解,搭建使用 Docker Registry 私服