问题
在Docker容器中,运行二进制文件出现 /bin/sh: xxx not found
,使用 Chmod 赋予执行权限依旧出现此问题。
解决
容器内执行 mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
原因
镜像可能使用的是以alpine镜像为基础的项目,可能出现动态链接库位置错误问题。
一般二进制文件在linux系统下编译,动态链接库是到/lib64目录下的,而在alpine镜像内无/lib64目录(参考)。
alpine镜像使用的是musl libc而不是gun libc,因而动态链接库的位置不一致。
参考
https://stackoverflow.com/questions/34729748/installed-go-binary-not-found-in-path-on-alpine-linux-docker
https://github.com/docker-library/openjdk/issues/77
https://github.com/gliderlabs/docker-alpine/issues/11
https://github.com/sgerrand/alpine-pkg-glibc/releases