同事开发的app,部署到aliyun上的单机版supOS后无法正常运行,初步排查发现是pod内DNS问题,无法解析外部域名,但是在ECS实例层我们可以正常解析。Alpine Linux镜像带有apk包管理工具,但是又因为DNS问题,无法从公网拉取软件包,所以需要离线安装apk包。
后续根因是阿里云的region级DNS服务器100.100.2.136和100.100.2.138处于100.64.0.0/10网段,和supOS默认的POD_CIDR重叠。
- exec -it进入pod,查询镜像的操作系统版本
cat /etc/os-release
如图,可以得知是Alpine Linux v3.7
- 在其他环境(比如本地docker环境),pull一个alpine:3.7镜像,并运行
docker pull alpine:3.7
docker run -it --name a37 alpine:3.7 /bin/sh
务必保证Alpine Linux版本一致,否则软件的依赖关系可能会有变化
- 使用
apk add tcpdump
可以安装tcpdump
同时观察到依赖包的版本和安装顺序
可以看到先安装了libpcap,随后安装了tcpdump
- 使用
apk fetch tcpdump
和apk fetch libpcap
将apk包下载保存到容器中
- 如果使用的是Docker Desktop,可以从“Files”很方便地将文件保存到外面的系统
- 将文件传输到服务器,然后再传输进pod内
比如用python3 -m http.server 18888
起一个简单的服务器,然后从pod内wget下载
apk add --allow-untrusted <path_to_package>
安装后即可运行tcpdump。注意,需要注意安装的先后次序。具体次序参步骤3中包被安装的顺序。