底稿线上问题回顾分析

  1. Docker容器内文件夹映射问题
  2. 域名无法识别问题

Docker容器内文件夹映射问题

问题描述: 在线上部署环境时,出现 Docker Container内部文件夹没有与外部文件夹关联起来的问题。Docker mount并没有生效,而通过 docker inspect命令可以看到mounts配置已经存在,且内外文件夹不存在权限问题。

Root Causes: 其实是宿主机对应文件夹被脚本删除后,重新创建了,其 inode 值已经发生了变化。对于开发人员而言,只关注其文件夹名称,并未注意到这点。解决方案很简单,重启容器,使其对新建文件夹进行重新映射。

什么是 inode:

An inode is denoted by the phrase “file serial number”, defined as a per-file system unique identifier for a file.That file serial number, together with the device ID of the device containing the file, uniquely identify the file within the whole system.Device ID (this identifies the device containing the file; that is, the scope of uniqueness of the serial number).

Inode本质上就是串行的文件id,与所在设备的id一起构成了整个操作系统唯一的文件标志符。

一般通过 stat命令来获取文件、文件夹的inode值,包括文件相关的权限,大小,修改日期等一系列参数。

1
2
3
4
5
6
7
8
➜  Documents stat -x muc_source_record.sql
File: "muc_source_record.sql"
Size: 11875 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 501/ligaofeng) Gid: ( 20/ staff)
Device: 1,5 Inode: 1716864 Links: 1
Access: Mon Dec 16 23:19:35 2019
Modify: Wed Aug 22 18:04:33 2018
Change: Mon Dec 16 23:19:35 2019

域名无法识别问题

问题描述: 部分服务因授权失败无法使用,最终定位出问题是yx-auth-nbbank-develop域名在一台机器上无法被正确的解析,在另一台服务器上则成功的被解析为 127.0.0.1。

Root Cause: 由于一些历史遗留原因,一台机器的**/etc/resolv.conf** 文件有 search localhost的配置,另一台没有,从而导致了IP 地址解析失败。

1
2
3
4
cat /etc/resolv.conf

nameserver xx.xx.xx.xx
search localhost

背景知识: search localhost 是如何生效的?

对于一个完全限定域名(英语:Fully qualified domain name,缩写为FQDN)而言,它是由主机名.域名组成的,其必然存在一个.

举例说,baidu.com 其中 baidu 是它的主机名,com则是域名。因此yx-auth-nbbank-develop并不是一个完全限定域名,对于这样的字符串,在 DNS 解析过程中,若在 resolv.conf 中配置 search {域名},则会将域名自动添加到主机名后构成完全限定域名进行查找。

所以在配置了 search localhost 后,对于非完全限定域名会被加上 localhost 域,从而被解析到 127.0.0.1

1
2
3
ping yx-auth-nbbank-develop

PING yx-auth-nbbank-develop.localhost (127.0.0.1) 58 bytes of data

Reference

inode-Wikipad

Linux man-page for resolv.conf