Alpine镜像最为最小的镜像,深受笔者喜欢。但是其小体积,是以丢弃工具、包为代价,在使用时候经常碰到问题。其中命令Not found
是在以Alpine为基础制作应用镜像时碰到的一个经常性问题。
问题
下面以制作fio应用镜像为例。(真实的fio并不是这么制作的,在这做了简化以方便提出问题)。我们编写Dockerfile
1 | FROM alpine:3.4 |
build成镜像名叫fio
,运行此镜像:
1 | $ docker run fio fio -h |
但是在容器中我们确实可以看到/usr/local/bin/fio
是存在的,并且有执行权限。
解决
该问题由于Alpine镜像中缺少glibc
包引起的,见问题。可以再这里找到该包。
回到我们docker build目录,下载glibc以及证书。
1 | wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk |
修改Dockerfile
1 | FROM alpine:3.4 |
再次构建后运行,程序正常。