在Alpine Linux Docker上找不到安装的Go二进制文件

我有一个Go二进制文件,我试图在Alpine Docker镜像上运行。

这适用于Docker Go二进制文件。

docker run -it alpine:3.3 sh apk add --no-cache curl DOCKER_BUCKET=get.docker.com DOCKER_VERSION=1.9.1 curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION" -o /usr/local/bin/docker chmod +x /usr/local/bin/docker docker help Usage: docker [OPTIONS] COMMAND [arg...] ... 

但是,对于我想要安装的Go二进制文件。

 RACK_BUCKET=ec4a542dbf90c03b9f75-b342aba65414ad802720b41e8159cf45.ssl.cf5.rackcdn.com RACK_VERSION=1.1.0-beta1 curl -fSL "https://${RACK_BUCKET}/${RACK_VERSION}/Linux/amd64/rack" -o /usr/local/bin/rack chmod +x /usr/local/bin/rack rack help sh: rack: not found /usr/local/bin/rack help sh: /usr/local/bin/rack: not found ls -al /usr/local/bin/ total 43375 drwxr-xr-x 2 root root 1024 Jan 11 18:10 . drwxr-xr-x 8 root root 1024 Jan 11 18:09 .. -rwxr-xr-x 1 root root 30222575 Jan 11 18:09 docker -rwxr-xr-x 1 root root 14190576 Jan 11 18:10 rack which rack /usr/local/bin/rack 

我认为这可能与这个答案有关,但是在运行ldd时我得不到相同的错误。

 ldd /usr/local/bin/rack /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000) libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000) libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fdd15cd0000) 

在安装了Go二进制文件的任何想法在Alpine Linux Docker的path中找不到?

 RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 

既然musl和glibc是兼容的,你可以使这个符号链接,它将修复缺少的依赖。

我用这些选项编译成阿尔卑斯山的二进制文件

 GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o [name of binary] 

有效。

或者,您可以同时使用Docker Hub的golang:alpine镜像。

 docker run -it golang:alpine sh # [...] 

根据程序的性质,您可能需要使用静态链接选项编译您的程序,如下所示:

-x -a -tag netgo -installsuffix netgo

之后,您不必担心链接正确的库。