在 Alpine 的路径中找不到已安装的 Go 二进制文件 Linux Docker
Installed Go binary not found in path on Alpine Linux Docker
我有一个 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
我认为这可能与 this answer 有关,但在 运行 宁 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)
在 Alpine 上的路径中找不到关于此安装的 Go 二进制文件的任何想法 Linux Docker?
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
由于 musl 和 glibc 兼容,您可以制作此符号链接,它将修复缺少的依赖项。
我使用这些选项在 alpine 中编译了 go 二进制文件
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o [name of binary]
成功了。
或者,您可以(同时)使用 Docker Hub 中的 golang:alpine
图像来编译和 运行 您的代码。
docker run -v ${YOUR_CODE_PATH}:/go/src/example -it golang:alpine sh
cd src/example
go build .
ldd example
/lib/ld-musl-x86_64.so.1 (0x7f677fcf7000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f677fcf7000)
根据程序的性质,您可能希望使用静态 link 选项编译您的 go 程序,例如:
-x -a -tags netgo -installsuffix netgo
之后您无需担心 link 使用正确的库。
在 Debian 9 (Stretch)/Go 1.10.2 和 运行 Alpine 3.7.0 下构建时:
CGO_ENABLED=0 go build
GOOS=linux
和 GOARCH=amd6
都没有必要。
您可以安装 libc6-compat
RUN apk add --no-cache libc6-compat
我有一个 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
我认为这可能与 this answer 有关,但在 运行 宁 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)
在 Alpine 上的路径中找不到关于此安装的 Go 二进制文件的任何想法 Linux Docker?
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
由于 musl 和 glibc 兼容,您可以制作此符号链接,它将修复缺少的依赖项。
我使用这些选项在 alpine 中编译了 go 二进制文件
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o [name of binary]
成功了。
或者,您可以(同时)使用 Docker Hub 中的 golang:alpine
图像来编译和 运行 您的代码。
docker run -v ${YOUR_CODE_PATH}:/go/src/example -it golang:alpine sh
cd src/example
go build .
ldd example
/lib/ld-musl-x86_64.so.1 (0x7f677fcf7000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f677fcf7000)
根据程序的性质,您可能希望使用静态 link 选项编译您的 go 程序,例如:
-x -a -tags netgo -installsuffix netgo
之后您无需担心 link 使用正确的库。
在 Debian 9 (Stretch)/Go 1.10.2 和 运行 Alpine 3.7.0 下构建时:
CGO_ENABLED=0 go build
GOOS=linux
和 GOARCH=amd6
都没有必要。
您可以安装 libc6-compat
RUN apk add --no-cache libc6-compat