工作总结之docker-compose安装mongo篇(踩坑走你)

工作总结之docker-compose安装mongo篇(踩坑走你)

背景

放弃Centos,使用Ubuntu,不要跟我扯Rocky Linux,他是Centos创始人发起,能保证不会成为下一个Rocky Stream?
存储一些不规则的数据,并且降低mysql的压力

版本选择

mongodb已经6.0了,很多人推荐4.2的版本,俺之前的公司也是用的4.2,但是有了解到4.4 版本更像是一个维护性的版本,而且是一个用户期待已久的维护性版本,还有的甚至说用新不用旧(据我的经验来看新的文档少,而且容易出问题),所以我选择4.4

安装

参考前人实践的文章:
https://developer.aliyun.com/article/980629?accounttraceid=57640f9a274f470d8617d7d6594bb572ogrp
https://www.cnblogs.com/raorao1994/p/14627358.html
https://www.jianshu.com/p/78230677c896
本文主要是总结问题

出现的问题以及总结

  1. docker-compose up -d之后没有docker logs日志,并且mongo处于无限重启中(最难受的是,连启动失败的日志都没有)
    这是本文着重要解决的问题。
    先来看看网上都给出了什么解决方案:
    - 查看系统层面的日志
    (1)https://www.cnblogs.com/wangxiaofengde/p/15533903.html
    日志文件:/var/log/messages
    Ubuntu默认没有这个文件,开起来:https://www.aiuai.cn/aifarm1200.html;结果发现这个日志看不懂,作罢
    Ubuntu系统的各种日志的情况:https://blog.csdn.net/Mikeoperfect/article/details/79234585
    (2)journalctl这个命令只能看到之前docker.service启动的一些日志(而且日期很久远),看不到容器的日志:https://zhuanlan.zhihu.com/p/139567884
    于是,这条路对于现在的我来说走不通
    - 启动一个空的,没有启动mongo的容器,然后进容器里面手动启动mongo
    (1)灵感来源:https://blog.csdn.net/u010483897/article/details/103362106和https://blog.csdn.net/weixin_36119862/article/details/128614678
    主要是command: "tail -f /dev/null"这个命令,但是结果悲催了,竟然可以正常启动,艹,一种植物
    (2)mongo的手动启动和关闭命令
    启动:https://juejin.cn/s/mongodb配置文件启动
    关闭:https://blog.51cto.com/u_13912516/5538670
    - 使用另一种看docker日志的方法(元数据):docker inspect
    (1)https://blog.csdn.net/weixin_34332905/article/details/93385595
    https://www.cnblogs.com/lucktomato/p/16709088.html
    https://blog.csdn.net/hshloveyy/article/details/123408311
    其实docker inspect --format '{{.LogPath}}' 60f486ec7c33这个的命令,实操起来会报错,建议使用docker inspect直接去找,事实上日志文件能找到,但是内容为空
    个人觉得应该是跟docker logs看日志是一样的
    - 使用交互模式
    (1)https://www.cda.cn/bigdata/201500.html
    研究了一下,docker-compose怎么以交互模式启动:
    https://cloud.tencent.com/developer/ask/sof/111359
    https://www.1ju.org/article/docker-compose-interactive-shell
    然而也没有用
    - 其他
    (1)主要是一些排查策略:
    https://m.51sjk.com/b134b136618/
    其实还是离不开日志
    最终的解决方案(分两步):
    (1). 先删除mongodb下的data目录或者是命名为备份文件;然后更换一个自己需要的mongo版本(然后就会有docker logs日志了,看到报错信息:
    2023-05-21T17:50:21.693617874Z {"t":{"$date":"2023-05-21T17:50:21.693Z"},"s":"F", "c":"CONTROL", "id":20574, "ctx":"main","msg":"Error during global initialization","attr":{"error":{"code":38,"codeName":"FileNotOpen",
    "errmsg":"Failed to open /var/log/mongodb/mongod.log"}}}
    ),很明显是权限不足(应该是对/usr/local/mongodb/data/log目录的权限不足,对应的正是/var/log/mongodb目录)
    (2). sudo chmod -R 777 /usr/local/mongodb(暴力一点),开放mongodb下的所有权限(不需要docker以特权方式privileged: true启动)
    总结一下就是,如果发现某些地方自己实践起来不对劲,找了一圈没有好的办法后,最好的办法就是把数据清干净,再重新来一遍,毕竟有些东西是前人实践过的,自己出现了一些偏差
    复现以及验证:
    (1). 先验证不删除data是否会导致没有docker logs日志(并且mongo处于无限重启中)
    不完全是,最主要的原因是在不同mongo的版本之间切换(从版本5到4.4.14有问题,好像4.0到4.4.14就没问题),启动(docker-compose)时,没有删除data目录,导致没有日志(在我自己的虚拟机上复现出来了)
    (2). 再验证(所谓交互式启动)
    stdin_open: true # docker run -i
    tty: true # docker run -t
    是否也会导致没有docker logs日志,答案是不会
  2. uncaught exception: Error: couldn't add user: not master :
    原因是:我的配置文件里面有副本集,不是主库
    解决办法:切换到主库或者不要副本集
    参考:https://stackoverflow.com/questions/31387053/cant-create-user或者https://github.com/lanlin/notes/issues/58
  3. docker-compose up -d会卡住
    原因:可能是网络原因
    解决办法:重启docker
    参考:
    https://stackoverflow.com/questions/38087027/docker-compose-stuck-downloading-or-pulling-fs-layer
    https://cloud.tencent.com/developer/article/1644463
    https://www.jianshu.com/p/0def990bfda0
posted @ 2023-05-22 15:31  xiaoxiaoguai98  阅读(627)  评论(0编辑  收藏  举报