alpine镜像制作的应用报not found问题解决

Alpine镜像最为最小的镜像,深受笔者喜欢。但是其小体积,是以丢弃工具、包为代价,在使用时候经常碰到问题。其中命令Not found是在以Alpine为基础制作应用镜像时碰到的一个经常性问题。

问题

下面以制作fio应用镜像为例。(真实的fio并不是这么制作的,在这做了简化以方便提出问题)。我们编写Dockerfile

1
2
3
FROM alpine:3.4

ADD fio /usr/local/bin/fio

build成镜像名叫fio,运行此镜像:

1
2
$ docker run fio fio -h
sh: fio: not found

但是在容器中我们确实可以看到/usr/local/bin/fio是存在的,并且有执行权限。

解决

该问题由于Alpine镜像中缺少glibc包引起的,见问题。可以再这里找到该包。
回到我们docker build目录,下载glibc以及证书。

1
2
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk
wget -q -O sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub

修改Dockerfile

1
2
3
4
5
6
7
8
FROM alpine:3.4

# 安装glibc
ADD sgerrand.rsa.pub /etc/apk/keys/sgerrand.rsa.pub
COPY glibc-2.25-r0.apk glibc-2.25-r0.apk
RUN apk add glibc-2.25-r0.apk && rm glibc-2.25-r0.apk

## 继续安装应用...

再次构建后运行,程序正常。

显示 Gitment 评论