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

Docker运行挂载目录可执行文件提示No such file or directory报错

问题描述

我尝试在容器中运行从/bin目录复制的ls副本(测试了容器内所有非/bin路径下的可执行文件均复现该问题),运行时出现报错:

docker run -v ~/Desktop/test:/test alpine:latest /test/ls
exec /test/ls: no such file or directory

当执行命令查看挂载目录时,可以看到该文件确实存在:

docker run -v ~/Desktop/test:/test alpine:latest ls /test
ls

已尝试的排查操作:

  • 为文件设置chmod +x执行权限,问题无变化
  • 更换基础镜像,问题无变化
  • 通过apt-get update && apt-get upgrade更新Docker及所有系统软件包,问题无变化

环境信息

  • 宿主机操作系统:Ubuntu 20.04.3 LTS
  • Docker版本:20.10.17,构建号100c701

容器inspect信息

{
    "Id": "abd66c400e6f58313d71c63c92688472874cdd4393d42e22df23a90264083b33",
    "Created": "2022-06-13T19:59:49.630474765Z",
    "Path": "/test/ls",
    "Args": [],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 1,
        "Error": "",
        "StartedAt": "2022-06-13T19:59:50.017551978Z",
        "FinishedAt": "2022-06-13T19:59:50.016401363Z"
    },
    "Image": "sha256:0ac33e5f5afa79e084075e8698a22d574816eea8d7b7d480586835657c3e1c8b",
    "ResolvConfPath": "/var/lib/docker/containers/abd66c400e6f58313d71c63c92688472874cdd4393d42e22df23a90264083b33/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/abd66c400e6f58313d71c63c92688472874cdd4393d42e22df23a90264083b33/hostname",
    "HostsPath": "/var/lib/docker/containers/abd66c400e6f58313d71c63c92688472874cdd4393d42e22df23a90264083b33/hosts",
    "LogPath": "/var/lib/docker/containers/abd66c400e6f58313d71c63c92688472874cdd4393d42e22df23a90264083b33/abd66c400e6f58313d71c63c92688472874cdd4393d42e22df23a90264083b33-json.log",
    "Name": "/cranky_pare",
    "RestartCount": 0,
    "Driver": "overlay2",
    "Platform": "linux",
    "MountLabel": "",
    "ProcessLabel": "",
    "AppArmorProfile": "docker-default",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": [
            "/home/egor/Desktop/test:/test"
        ],
        "ContainerIDFile": "",
        "LogConfig": {
            "Type": "json-file",
            "Config": {}
        },
        "NetworkMode": "default",
        "PortBindings": {},
        "RestartPolicy": {
            "Name": "no",
            "MaximumRetryCount": 0
        },
        "AutoRemove": false,
        "VolumeDriver": "",
        "VolumesFrom": null,
        "CapAdd": null,
        "CapDrop": null,
        "CgroupnsMode": "host",
        "Dns": [],
        "DnsOptions": [],
        "DnsSearch": [],
        "ExtraHosts": null,
        "GroupAdd": null,
        "IpcMode": "private",
        "Cgroup": "",
        "Links": null,
        "OomScoreAdj": 0,
        "PidMode": "",
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "SecurityOpt": null,
        "UTSMode": "",
        "UsernsMode": "",
        "ShmSize": 67108864,
        "Runtime": "runc",
        "ConsoleSize": [
            0,
            0
        ],
        "Isolation": "",
        "CpuShares": 0,
        "Memory": 0,
        "NanoCpus": 0,
        "CgroupParent": "",
        "BlkioWeight": 0,
        "BlkioWeightDevice": [],
        "BlkioDeviceReadBps": null,
        "BlkioDeviceWriteBps": null,
        "BlkioDeviceReadIOps": null,
        "BlkioDeviceWriteIOps": null,
        "CpuPeriod": 0,
        "CpuQuota": 0,
        "CpuRealtimePeriod": 0,
        "CpuRealtimeRuntime": 0,
        "CpusetCpus": "",
        "CpusetMems": "",
        "Devices": [],
        "DeviceCgroupRules": null,
        "DeviceRequests": null,
        "KernelMemory": 0,
        "KernelMemoryTCP": 0,
        "MemoryReservation": 0,
        "MemorySwap": 0,
        "MemorySwappiness": null,
        "OomKillDisable": false,
        "PidsLimit": null,
        "Ulimits": null,
        "CpuCount": 0,
        "CpuPercent": 0,
        "IOMaximumIOps": 0,
        "IOMaximumBandwidth": 0,
        "MaskedPaths": [
            "/proc/asound",
            "/proc/acpi",
            "/proc/kcore",
            "/proc/keys",
            "/proc/latency_stats",
            "/proc/timer_list",
            "/proc/timer_stats",
            "/proc/sched_debug",
            "/proc/scsi",
            "/sys/firmware"
        ],
        "ReadonlyPaths": [
            "/proc/bus",
            "/proc/fs",
            "/proc/irq",
            "/proc/sys",
            "/proc/sysrq-trigger"
        ]
    },
    "GraphDriver": {
        "Data": {
            "LowerDir": "/var/lib/docker/overlay2/115140c86b11eb773f30d2329ec05388224e75dfbcef9977c87bb3f0e32e8769-init/diff:/var/lib/docker/overlay2/22348355d634b9183f798e9622f71809a9a62a7c6accdf723aa72d979e3ba7f4/diff",
            "MergedDir": "/var/lib/docker/overlay2/115140c86b11eb773f30d2329ec05388224e75dfbcef9977c87bb3f0e32e8769/merged",
            "UpperDir": "/var/lib/docker/overlay2/115140c86b11eb773f30d2329ec05388224e75dfbcef9977c87bb3f0e32e8769/diff",
            "WorkDir": "/var/lib/docker/overlay2/115140c86b11eb773f30d2329ec05388224e75dfbcef9977c87bb3f0e32e8769/work"
        },
        "Name": "overlay2"
    },
    "Mounts": [
        {
            "Type": "bind",
            "Source": "/home/egor/Desktop/test",
            "Destination": "/test",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],
    "Config": {
        "Hostname": "abd66c400e6f",
        "Domainname": "",
        "User": "",
        "AttachStdin": false,
        "AttachStdout": true,
        "AttachStderr": true,
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "/test/ls"
        ],
        "Image": "alpine:latest",
        "Volumes": null,
        "WorkingDir": "",
        "Entrypoint": null,
        "OnBuild": null,
        "Labels": {}
    },
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "fb64f195f203033f02b9c5555e0b1d2cdd2819f3ac12f3046416f8e13378bc3d",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {},
        "SandboxKey": "/var/run/docker/netns/fb64f195f203",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "bridge": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "cb261cd6eca2ddb567984e2d7d9e6df14008c774d73f0d76129da6c8edc6955c",
                "EndpointID": "",
                "Gateway": "",
                "IPAddress": "",
                "IPPrefixLen": 0,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "",
                "DriverOpts": null
            }
        }
    },
    "CreatedTime": 1655150389630
}

问题原因

这个报错和文件权限、Docker版本、挂载配置都没关系,是Linux下执行二进制文件的典型误导性报错:当二进制依赖的动态链接器(ELF解释器)不存在时,系统会直接返回no such file or directory,不会提示具体缺失的依赖文件。

你的ls文件是从Ubuntu宿主机的/bin目录复制的,Ubuntu的二进制默认动态链接到glibc库,对应的动态链接器路径是/lib64/ld-linux-x86-64.so.2;而Alpine镜像为了精简体积,默认使用musl libc,根本没有提供glibc的链接器和依赖库,所以内核加载这个ls二进制时找不到对应的解释器,直接抛出文件不存在的错误。

你观察到的“容器内非/bin路径的可执行文件都复现问题”,本质逻辑完全一致:只要是从宿主机复制过去的、动态链接glibc的二进制,不管放在哪个路径下,在Alpine里运行都会报这个错,和路径位置没有关系。

验证方法

可以直接在容器内查看这个ls二进制的动态依赖,执行命令:

docker run -v ~/Desktop/test:/test --rm alpine:latest ldd /test/ls

输出会明确显示找不到/lib64/ld-linux-x86-64.so.2这个链接器文件。

解决方案

根据实际需求选一种即可:

  • 使用匹配的基础镜像:如果要运行宿主机Ubuntu上复制的glibc动态链接二进制,不要用Alpine镜像,换成Ubuntu、Debian这类默认集成glibc的基础镜像即可正常运行。
  • 在Alpine内安装glibc兼容层:如果必须使用Alpine镜像,可以手动添加glibc运行环境,但兼容性不如直接使用glibc基础镜像稳定。
  • 编译静态链接二进制:编译时增加静态链接参数,把所有依赖都打包进二进制文件,不需要依赖系统动态库,可以在任意同架构Linux环境下运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:24:19