You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker多阶段构建出现「文件未找到」异常求助

问题

我编写了如下Dockerfile,希望整合git、MinIO Client、zip工具,镜像构建过程无报错,但运行容器时,明明/usr/bin/git、/usr/bin/zip文件存在,执行时却提示「No such file or directory」,请问该如何解决?

Dockerfile内容

FROM alpine/git AS git

RUN apk fix && apk --no-cache --update add  zip

VOLUME /root
WORKDIR /root

FROM minio/mc AS minio

COPY --from=git /usr/bin/git /usr/bin/git
COPY --from=git /usr/bin/zip /usr/bin/zip


ENTRYPOINT ["sh"]

运行容器后的报错信息

Sending build context to Docker daemon  8.192kB
Step 1/8 : FROM alpine/git AS git                          
 ---> 22d84a66cda4                                        
Step 2/8 : RUN apk fix && apk --no-cache --update add  zip
 ---> Using cache                
 ---> 5ce4d94085d9               
Step 3/8 : VOLUME /root          
 ---> Using cache                
 ---> 89329e40cbba               
Step 4/8 : WORKDIR /root         
 ---> Using cache                
 ---> 37f2c9216bb1               
Step 5/8 : FROM minio/mc AS minio
 ---> 396036e5ac42
Step 6/8 : COPY --from=git /usr/bin/git /usr/bin/git
 ---> 543676360b6d
Step 7/8 : COPY --from=git /usr/bin/zip /usr/bin/zip
 ---> 936165b36d2e
Step 8/8 : ENTRYPOINT ["sh"]
 ---> Running in 4ee0c4b491f9
Removing intermediate container 4ee0c4b491f9
 ---> 1279af2dd755
Successfully built 1279af2dd755
Successfully tagged fabric:latest
[centos@ip-10-6-5-12 ~]$ sudo docker run -it  fabric
sh-4.4# which zip
sh: which: command not found
sh-4.4# zip
sh: /usr/bin/zip: No such file or directory
sh-4.4# which git
sh: which: command not found
sh-4.4# git
sh: /usr/bin/git: No such file or directory
sh-4.4# git
sh: /usr/bin/git: No such file or directory
sh-4.4# apt
sh: apt: command not found
sh-4.4# ls -al /usr/bin/git 
-rwxr-xr-x. 1 root root 2911912 Oct 19 04:51 /usr/bin/git
解决思路与方案

问题根源

alpine/git基于Alpine Linux,使用musl libc作为C标准库;而minio/mc基于RHEL/CentOS系镜像,使用glibc。直接复制Alpine环境编译的git、zip二进制文件到glibc环境中,会因为依赖的底层C库不兼容,导致系统无法找到对应的动态链接依赖,进而出现「文件存在但无法执行」的错误。

解决方案

有两种可靠的解决方式:

方式一:基于Alpine构建统一环境

以alpine/git为基础镜像,直接安装minio/mc,确保整个环境的C标准库统一为musl:

FROM alpine/git

# 安装zip工具
RUN apk fix && apk --no-cache --update add zip

# 下载并安装minio/mc
RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/bin/mc \
    && chmod +x /usr/bin/mc

VOLUME /root
WORKDIR /root

ENTRYPOINT ["sh"]

方式二:基于minio/mc的基础镜像安装工具

minio/mc的基础镜像属于RHEL/CentOS系,直接用yum安装git和zip,确保二进制文件依赖glibc:

FROM minio/mc

# 安装git和zip工具,清理yum缓存减少镜像体积
RUN yum install -y git zip && yum clean all

VOLUME /root
WORKDIR /root

ENTRYPOINT ["sh"]

验证

构建镜像后运行容器,执行git --version和zip --version,如果能正常输出版本信息,说明问题已解决。

内容的提问来源于stack exchange,提问作者Christian Bongiorno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:50