IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker数据挂载而引发的问题 -> 正文阅读

[系统运维]docker数据挂载而引发的问题

以前看过docker的相关教学视频,但是工作后没用到都忘得一干二净了。并且本次所遇到的问题,前面说了忘记了docker相关知识(主要还是太菜了,不过还好有大佬的指导),测试同事也未告知我服务是使用docker技术以容器运行的(甩锅,hh),大概的都交代完了,说下遇到的问题前后经过吧。

测试同事反馈,web页面发下去的策略,终端有收到但是收到的策略内容不完整,我去测试环境模拟下发策略,发现策略缺失的部分为配置策略时上传的规则文件的内容。

通过添加日志发现上层接口获取文件内容时,没有获取到文件内容。上层接口里封装了系统调用函数int open(constchar*pathname,intflags) 以及ssize_t read (int fd, void *buf, size_t count);根据上层接口返回的错误码在底层封装的系统调用open/read处添加日志并且将errno打印出来。发现系统调用open函数执行不成功并且errno为2,即no such file or directory
但是文件明明是存在的,stat命令查看策略下发前后状态,发现文件状态没有发生变化,说明在策略下发前后文件并未被删除。
我自己就写了个demo,使用同样的上层接口去获取文件内容,发现可以获取到文件内容。我就比较疑惑,为什么我们的服务起来去读文件会no such file,而我的demo确实正确的获取到文件内容,并且文件并没有被删除过

后面在公司大佬指导帮助下,
描述下大佬的操作流程

[root@LV7000-342458 leagsoft]# ps -ef |grep UniServer
root      176196    1926  0 10:12 pts/0    00:00:07 ./UniServer
root      363374  288844  0 10:53 pts/0    00:00:00 grep --color=auto UniServer

可以看到服务的父进程

[root@LV7000-342458 leagsoft]# ps -ef |grep 1926
root        1926    1398  0 09:38 pts/0    00:00:00 /bin/sh /start_UServer.sh
root      176196    1926  0 10:12 pts/0    00:00:07 ./UniServer
root      363781    1926  0 10:53 pts/0    00:00:00 sleep 3
root      363997  288844  0 10:53 pts/0    00:00:00 grep --color=auto 1926
[root@LV7000-342458 leagsoft]# vi /s
sbin/     srv/      swapfile  sys/
[root@LV7000-342458 leagsoft]# vi /s
sbin/     srv/      swapfile  sys/

发现根目录下并没有这个start_UServer.sh文件,判断服务可能是以容器在运行

[root@LV7000-342458 leagsoft]# docker ps |grep UniServer
def93143318e   unios:v1.2   "/start_UServer.sh"      2 hours ago         Up About an hour             UniServer

然后发现服务确实以容器在运行,给出结论,uniserver服务读取的文件没有映射到容器中

我查了docker相关资料
进行如下操作

[root@LV7000-342458 leagsoft]# docker inspect UniServer | grep Mounts -A 57
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/opt/hhd",
                "Destination": "/opt/hhd",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/etc",
                "Destination": "/etc",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/app/LeagView/Bin",
                "Destination": "/opt/app/LeagView/Bin",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/app/LeagView/Dat",
                "Destination": "/opt/app/LeagView/Dat",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/app/LeagView/Ini",
                "Destination": "/opt/app/LeagView/Ini",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/app/LeagView/Lan",
                "Destination": "/opt/app/LeagView/Lan",
                "Mode": "ro",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/app/LeagView/Log",
                "Destination": "/opt/app/LeagView/Log",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

发现服务去打开并读取的文件所在的目录确实没有在映射到容器中,所以以容器形式运行服务去打开文件时,当然是no such file。
之后就是检查代码中其它处使用这个上层接口去读的相关目录的汇总(避免服务不能正常提供相关功能)。把目录汇总给相关开发人员,将其映射到容器中。

总结:整个流程下来,并不是很难的问题。但是问题在于未知。主要还是太菜了,继续努力吧

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:13:16  更:2022-03-13 22:17:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:48:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码