当前位置:首页 > 科技  > 软件

与机器打交道的工作:细节决定浪费生命的时间——记一次 Docker 与软链接的故障

来源: 责编: 时间:2024-07-19 08:01:38 508观看
导读问题背景假设在一台 ubuntu 服务器上,我们有一个专门存放日频数据的路径:ls /data/daily -lh202401012024010220240103...这些数据过于庞大,我们无法将其全部保存在服务器中。对于这些数据,只有当天的路径,我们需要对其有

问题背景

假设在一台 ubuntu 服务器上,我们有一个专门存放日频数据的路径:DXa28资讯网——每日最新资讯28at.com

ls /data/daily -lh202401012024010220240103...

这些数据过于庞大,我们无法将其全部保存在服务器中。对于这些数据,只有当天的路径,我们需要对其有「写」的权限,历史数据我们只读即可。DXa28资讯网——每日最新资讯28at.com

因此,假设今天是 20240717 ,那么,我们可以将小于 20240717 的数据软链接到一个 mount 到服务器上的分布式文件系统中,比如:DXa28资讯网——每日最新资讯28at.com

ls /data/daily -lh20240101 -> /mnt/gfs-data/daily/2024010120240102 -> /mnt/gfs-data/daily/20240102...20240716 -> /mnt/gfs-data/daily/2024071620240717

接下来,我们希望启动的 docker 容器可以访问 daily 数据,那么:DXa28资讯网——每日最新资讯28at.com

docker run /  -v /data/daily:/data/daily /  --name my-service-container /  my-service-image  run-service-command

此时 my-service-container 报错:DXa28资讯网——每日最新资讯28at.com

no such file or directory: /data/daily/20240716

但是当你进入容器:DXa28资讯网——每日最新资讯28at.com

docker exec -it my-service-container /bin/bash$ cd /data/daily$ ls20240101  20240102  ...  20240716 20240717# 数据似乎存在?$ ls -l 20240716no such file or directory: 20240716# 明明存在,却无法访问?

那么,问题出在了哪里?

我估计读到这里的读者中,至少有一半已经知道了问题所在。DXa28资讯网——每日最新资讯28at.com

但是让我们先来看看一些错误的思路(也是困住了我的思路):DXa28资讯网——每日最新资讯28at.com

一、会不是文件系统权限问题?DXa28资讯网——每日最新资讯28at.com

  • 显然, docker 容器在未开启 --privileged ,权限是不完整的
  • 尤其是涉及到与 mount 分布式文件系统的交互,这其中是很容易出问题的

二、软链接的问题?DXa28资讯网——每日最新资讯28at.com

  • 软链接本身不复杂,但是 docker 与软链接的结合,可能有点问题?
  • 于是甚至很傻地去搜了 stackoverflow ,尝试类比 docker 、 softlink 、 mount 相关的问题

三、其他更复杂的原因导致的?DXa28资讯网——每日最新资讯28at.com

  • 问问 ChatGPT 吧!免费版不聪明,再问问 ChatGPT-4o !
  • 嗯...是我的 prompt 写得太差了?获得了一些正确的废话

如果你已经知道问题,你或许会嘲笑上述费力不讨好的一番折腾。但是为什么我(或者其他陷入误区的读者)会想到这些呢?DXa28资讯网——每日最新资讯28at.com

  1. 思维惯性。大多数日常使用 docker 的人(比如现在的我),对于 docker 的了解是不够深入的,在经历过一些 docker 的 bug 后,再遇到类似的问题,首先会顺其自然想到是不是 docker 本身的问题
  2. 所见即所得。我明明已经 ls 出了 20240101 20240102 ... 20240716 20240717 ,为什么还会出现 no such file or directory: /data/daily/20240716 ?显然, 20240716 是软链接的、是来自 /mnt/gfs-data/ 的,而这个庞大的分布式文件系统很有可能存在一些兼容性问题

真正的解决之道

我在 docker 内部敲入下面的命令让我恍然大悟,甚至为自己的愚蠢发笑:DXa28资讯网——每日最新资讯28at.com

docker exec -it my-service-container /bin/bash$ cd /data/daily$ ls -lh20240101 -> /mnt/gfs-data/daily/2024010120240102 -> /mnt/gfs-data/daily/20240102...20240716 -> /mnt/gfs-data/daily/2024071620240717

显然,软链接在 docker 内部链接到了 /mnt/gfs-data/ ,那么,你也需要让 /mnt/gfs-data/ 映射到本地的 /data/daily/ 路径上!DXa28资讯网——每日最新资讯28at.com

增加一行挂载直接解决问题:DXa28资讯网——每日最新资讯28at.com

docker run /  -v /data/daily:/data/daily /  -v /mnt/gfs-data:/mnt/gfs-data /  --name my-service-container /  my-service-image  run-service-command

所以,既不是 docker 的问题,也不是权限的问题,更不是文件系统的问题。DXa28资讯网——每日最新资讯28at.com

为什么程序员的下班时间不同

所以,为什么有些程序员下班早,看起来还很轻松?DXa28资讯网——每日最新资讯28at.com

他可能并不是摸鱼大事。相反,他对于机器有更好的直觉与灵感,而这一切的前提是他积累了足够的知识与经验。DXa28资讯网——每日最新资讯28at.com

显然,对于 docker ,仅仅知道基本的 cgroups 实现原理是不够的。没有更扎实的基础知识与经验作为支撑,我们甚至总是焦头烂额地走向了错误的解决问题的方向。DXa28资讯网——每日最新资讯28at.com

细节决定浪费生命的时间。停下来,想一想自己是不是刚刚死脑筋了。DXa28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-101715-0.html与机器打交道的工作:细节决定浪费生命的时间——记一次 Docker 与软链接的故障

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们如何管理软件项目的交付?

下一篇: Java 函数式接口,一文彻底剖析!

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • K60 Pro官方停产 第三方瞬间涨价

    K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
Top