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?
Since the musl and glibc so are compatible, you can make this symlink and it will fix the missing dependency.
Alternatively, you can (meanwhile) use the
golang:alpine
image from Docker Hub to compile and run your code.I compiled go binary in alpine with these options
It worked.
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.
When building under Debian 9 (Stretch) / Go 1.10.2 and running under Alpine 3.7.0:
Neither
GOOS=linux
norGOARCH=amd6
was necessary.