无法从alpine linux容器中运行jfrog可执行文件

时间:2017-04-04 14:08:54

标签: docker alpine jfrog-mission-control

我使用的是alpine linux容器,具体为python:3.4-alpineopenjdk:8-jdk-alpine。当我尝试执行我在可执行文件中放置的任何脚本或可执行文件时,我得到Not Found错误。

例如。在python:3.4-alpine容器中我要安装jfrog时,我按照命令here(在我通过apk安装curl之后)。此命令下载shell脚本并将其管道为sh,下载并创建具有正确权限的jfrog可执行文件。当我尝试运行此可执行文件时,我正在

  

bin / sh:./ jfrog:not found

更新

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

  

/ #bin / sh jfrog   jfrog:第1行:ELF:未找到   jfrog:第1行:语法错误:未终止的引用字符串

知道我做错了什么吗?我怀疑它只与容器中存在的root用户有关。

4 个答案:

答案 0 :(得分:6)

我不确定jfrog可执行文件是否已动态关联,并且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依赖,而alpine带有musl。 您可以尝试添加apk add libc6-compat,但我不确定它是否可行

答案 1 :(得分:4)

问题是,jfrog cli是针对glibc而编译的,而alpine linux只提供了uclibc。要使它在高山下运行并不是微不足道的,你必须安装一个比那时更高的沙箱。 https://wiki.alpinelinux.org/wiki/Running_glibc_programs

另一种可能性是在alpine中自己编译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"]

答案 2 :(得分:1)

您运行的脚本以:

开头
#!/bin/bash

默认情况下,Bash不包含在alpine中。您可以使用以下命令安装它:

apk update && apk add bash

请注意,alpine在设计上相当简单,因此可能需要添加其他缺少的依赖项才能使此脚本正常工作。

答案 3 :(得分:0)

可能为时已晚,但这可能会对其他人有所帮助。

RUN curl -Lo /usr/bin/jfrog https://api.bintray.com/content/jfrog/jfrog-cli-go/\$latest/jfrog-cli-linux-386/jfrog?bt_package=jfrog-cli-linux-386 \
    && chmod a+x /usr/bin/jfrog

(Click Here for Reference Link)