Docker 使用 alpine 构建镜像时出现添加的可执行文件无法使用的问题
问题起因
笔者今天第一次使用 alpine 作为 docker 的基础镜像,只知道 alpine 是一个极其精简的 Linux 版本,没有更多地去了解。笔者像平时一样用 g++ 编译程序,在本地运行时正常,但在 Dockerfile 中使用 COPY 命令添加后,却出现了无法运行的问题,具体体现为:
$ docker run mazeprog:latest
/bin/sh: /opt/maze: not found
对应的 Dockerfile 为:
From alpine:latest
COPY ./maze /opt/
COPY ./m2 /opt
RUN chmod 0777 /opt/maze
CMD /opt/maze /opt/m2
其中,maze
是一个 x86_64 的可执行 ELF 文件,m2
是一个主程序使用的文本文件。
解决思路
出现了 not found
的问题后,立刻想到两个可能的原因,可以试着先排查一下。
首先是,是否正确地放置到了预期的位置?这个通过基于构建的镜像运行一下 ls
命令就可以知道:
$ docker run mazeprog