无法从高山linux容器内运行jfrog可执行文件

我正在使用一个alpine linux容器,特别是python:3.4-alpineopenjdk:8-jdk-alpine 。 当我尝试执行任何脚本或可执行文件时,我已经在可执行文件中Not Found错误。

例如。 当在python:3.4-alpine容器中我想安装jfrog我在这里按照命令(通过apk安装curl之后)。 这个命令下载一个shell脚本,并pipe理它下载并创build一个具有正确权限的jfrog可执行文件。 当我试图运行这个可执行文件,我越来越

bin / sh:./jfrog:找不到

更新

我发现root用户默认使用bin/ash ,我不知道它是什么。 所以我手动调用bin/sh jfrog ,并得到

/#bin / sh jfrog jfrog:第1行:ELF:找不到jfrog:第1行:语法错误:未终止的带引号的string

任何想法我做错了什么? 我怀疑它只与容器中存在的root用户有关。

我不确定,但jfrog可执行文件是dynamic链接的,并且使用ldd jfrog

 ldd jfrog /lib64/ld-linux-x86-64.so.2 (0x55ffb4c8d000) libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x55ffb4c8d000) libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x55ffb4c8d000) 

正如你可以看到你有libc的依赖,高山来与musl。 你可以尝试添加apk add libc6-compat但我不知道它会工作

您正在运行的脚本开始于:

 #!/bin/bash 

Bash默认不包含在阿尔卑斯山之中。 你可以用下面的方法安装它

 apk update && apk add bash 

请注意,高山是相当剥离的devise,所以可能有其他缺less的依赖,你需要添加使这个脚本工作。

问题是,jfrog cli是针对glibc编译的,而高山linux只提供了uclibc。 为了使它在阿尔卑斯山下运行并不重要,你必须安装比阿尔卑斯山环境更大的沙箱。 https://wiki.alpinelinux.org/wiki/Running_glibc_programs

另外一种可能是你自己编译jfrog二进制文件。 这个Dockerfile为我工作。

 FROM golang:alpine WORKDIR /app/ RUN apk update && apk add git # checkout the latest tag of jfrog cli RUN mkdir -p /go/src/github.com/jfrogdev/jfrog-cli-go \ && git clone https://github.com/JFrogDev/jfrog-cli-go /go/src/github.com/jfrogdev/jfrog-cli-go\ && cd /go/src/github.com/jfrogdev/jfrog-cli-go \ && git checkout $(git describe --tags `git rev-list --tags --max-count=1`) RUN GOOS=linux go get github.com/jfrogdev/jfrog-cli-go/jfrog FROM alpine COPY --from=0 /go/bin/jfrog /usr/bin/ ENTRYPOINT ["jfrog"]