Подтвердить что ты не робот

Установленный двоичный код Go не найден в пути на докере Alpine Linux

У меня есть двоичный файл 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?

4b9b3361

Ответ 1

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

Так как musl и glibc совместимы, вы можете сделать эту символическую ссылку и исправить недостающую зависимость.

Ответ 2

Я скомпилировал go binary in alpine с этими параметрами

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

Это сработало.

Ответ 3

В качестве альтернативы вы можете использовать образ golang:alpine из Docker Hub.

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

Ответ 4

В зависимости от характера программы вы можете захотеть скомпилировать вашу программу go со статическими параметрами ссылок, например:

-x -a -tags netgo -installsuffix netgo

Впоследствии вам не нужно беспокоиться о связи правильных библиотек.