Alpine Linux 离线安装apk

同事开发的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重叠。

  1. exec -it进入pod,查询镜像的操作系统版本 cat /etc/os-release

如图,可以得知是Alpine Linux v3.7

  1. 在其他环境(比如本地docker环境),pull一个alpine:3.7镜像,并运行 docker pull alpine:3.7docker run -it --name a37 alpine:3.7 /bin/sh

务必保证Alpine Linux版本一致,否则软件的依赖关系可能会有变化

  1. 使用apk add tcpdump可以安装tcpdump

同时观察到依赖包的版本和安装顺序

可以看到先安装了libpcap,随后安装了tcpdump

  1. 使用apk fetch tcpdumpapk fetch libpcap

将apk包下载保存到容器中

  1. 如果使用的是Docker Desktop,可以从“Files”很方便地将文件保存到外面的系统
  1. 将文件传输到服务器,然后再传输进pod内

比如用python3 -m http.server 18888起一个简单的服务器,然后从pod内wget下载

  1. apk add --allow-untrusted <path_to_package>安装后即可运行tcpdump。注意,需要注意安装的先后次序。具体次序参步骤3中包被安装的顺序。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据