Installed Go binary not found in path on Alpine Linux Docker
Solution 1
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
Since the musl and glibc so are compatible, you can make this symlink and it will fix the missing dependency.
Solution 2
I compiled go binary in alpine with these options
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o [name of binary]
It worked.
Solution 3
When building under Debian 9 (Stretch) / Go 1.10.2 and running under Alpine 3.7.0:
CGO_ENABLED=0 go build
Neither GOOS=linux
nor GOARCH=amd6
was necessary.
Solution 4
You can install libc6-compat
RUN apk add --no-cache libc6-compat
Solution 5
Depending on the nature of the program, you might want to compile your go program with static link options, such as the following:
-x -a -tags netgo -installsuffix netgo
Afterwards you do not need to worry about linking the correct libraries.
Everett Toews
My focus is creating platforms that improve the developer experience of building Cloud Native applications through a combination of dev, ops, docs, integration, testing, and CI/CD. I'm interested in composing platforms from complementary technologies including code, containers, and cloud. All of this work culminates in one purpose, releasing software to users more securely, safely, and frequently. I like to teach what I learn along the way.
Updated on December 17, 2020Comments
-
Everett Toews over 3 years
I've got a Go binary I'm trying to run on the Alpine Docker image.
This works fine for the Docker Go binary.
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...] ...
However, for the Go binary I want to install.
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
I thought it might have something to do with this answer but I don't get the same error when running
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)
Any idea with this installed Go binary is not found in path on Alpine Linux Docker?