2017-04-04 5 views
2

Ich bin mit einem alpine linux Container und speziell python:3.4-alpine und openjdk:8-jdk-alpine. Wenn ich versuche, ein Skript oder eine ausführbare Datei auszuführen, die ich in die ausführbare Datei gestellt habe, erhalte ich den Fehler Not Found.kann nicht ausführen jfrog ausführbar von innen alpine Linux-Container

Zum Beispiel. Wenn ich in dem python:3.4-alpine Container ich jfrog installieren möchte, folge ich dem Befehl here (nachdem ich curl über apk installiert habe). Dieser Befehl lädt ein Shell-Skript herunter und leitet es an sh, welches eine jfrog ausführbare Datei mit den korrekten Berechtigungen herunterlädt und erstellt. Wenn ich versuche, diese Datei auszuführen erhalte ich

bin/sh: ./jfrog: not found

Update

Ich entdeckte, dass der Benutzer root bin/ash standardmäßig verwendet, die ich keine Ahnung, was es ist. So aufgerufen ich bin/sh jfrog manuell und ich

/ # bin/sh jfrog jfrog: line 1: ELF: not found jfrog: line 1: syntax error: unterminated quoted string

Jede Idee, was ich falsch mache? Ich vermute, dass es nur mit dem root-Benutzer im Container zu tun hat.

+0

Ich denke, wir brauchen mehr Details. Bitte siehe http://StackOverflow.com/Help/Mcve – BMitch

+0

aktualisiert die Frage – LetsPlayYahtzee

Antwort

1

Das Skript Sie ausführen, beginnt mit:

#!/bin/bash 

Bash ist nicht mit alpinen standardmäßig enthalten. Sie können es mit installieren:

apk update && apk add bash 

Beachten Sie, dass alpine ziemlich nach Design nach unten abgezogen wird, so kann es auch andere fehlende Abhängigkeiten, die Sie hinzufügen, benötigen, um dieses Skript funktioniert.

+0

Ich machte die Frage ein wenig konkreter, weil es sich herausstellt, dass mein Problem ist, wie man 'jfrog' auf alpine Linux-Container ausführen. Ihr Vorschlag löste das Problem für den Container "ubuntu" obwohl – LetsPlayYahtzee

2

Ich bin nicht sicher, aber die JFrog ausführbare dynamisch verbunden ist, und mit ldd jfrog Sie erhalten:

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) 

Wie Sie sehen können Sie libc Abhängigkeiten und alpine kommen mit MUSL. Sie können versuchen, apk add libc6-compat hinzuzufügen, aber ich bin mir nicht sicher, es wird funktionieren

+0

nein:/ich denke, ich werde curl anstelle von 'jfrog' verwenden müssen – LetsPlayYahtzee

1

das Problem ist, dass Jfrog CLI wurde kompiliert gegen Glibc und Alpine Linux bietet nur Uclibc. Um es unter alpin zu betreiben ist es nicht trivial, man muss eine Sandbox installieren, die größer ist als damals alpin env. https://wiki.alpinelinux.org/wiki/Running_glibc_programs

Eine weitere Möglichkeit besteht darin, das jfrog-Binary selbst in alpine zu kompilieren. Diese Dockerfile hat für mich funktioniert.

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"] 
+0

Ich habe einen Fehler über" Sie sind derzeit nicht auf einem Zweig. " wenn versucht wird, diese dockerfile – rwilson04

+0

zu verwenden, musste 'RUN GOOS = linux gehen, github.com/jfrogdev/jfrog-cli-gehen/jfrog-cli/jfrog' stattdessen gehen – rwilson04

Verwandte Themen