Installed Go binary not found in path on Alpine Linux Docker

39,990

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.

Share:
39,990
Everett Toews
Author by

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, 2020

Comments

  • Everett Toews
    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?