274 字
1 分钟
0
Docker 采用 Alpine 镜像提示 sh: not found
装了 1panel 以后突然喜欢上了写 docker-compose.yml(x ,有一些小工具用 Alpine 作镜像就够了,但是在写 tailscale derper 的 docker compose 的时候容器怎么也跑不起来,执行 go 二进制文件提示 sh: ./derper not found
。
有点奇葩了。刚开始其实没想到是 Alpine 镜像的问题,后来查了很久才明白是怎么一回事。
因为 Alpine 太精简了,它用的是 musl libc 而不是标准的 gnu libc,然后就会导致这些问题。
解决办法
因为项目很小很小,所以咱是直接用 Alpine 镜像,采用 command 在容器中执行 sh 来运行项目的。
思路是把要用到的 libc 库补全。命令如下:
command:
- sh
- -c
- |
mkdir /lib64; ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2; apk add gcompat
gcompat include libresolv.so.2
# Proceed with your workflow! :)
其中 gcompat include libresolv.so.2
是安装所需库的命令。当执行可执行文件时,假如库不存在,会报错:
Error loading shared library libresolv.so.2: No such file or directory (needed by ./derper)
Error relocating ./derper: __res_search: symbol not found
找出缺失的库添加到后面就行啦!
Docker 采用 Alpine 镜像提示 sh: not found
https://blog.lzc256.com/posts/docker-alpine-sh-not-found/