2017-04-04 3 views
2

J'utilise un conteneur alpine linux et plus précisément python:3.4-alpine et openjdk:8-jdk-alpine. Lorsque j'essaie d'exécuter un script ou un exécutable que j'ai placé dans l'exécutable, j'obtiens l'erreur Not Found.ne peut pas exécuter jfrog exécutable à partir de l'intérieur du conteneur alpin linux

Par exemple. Lorsque dans le conteneur python:3.4-alpine je veux installer jfrog Je suis la commande here (après avoir installé curl via apk). Cette commande télécharge un script shell et le redirige vers sh qui télécharge et crée un exécutable jfrog avec les permissions correctes. Quand je suis en train d'exécuter cet exécutable Je reçois

bin/sh: ./jfrog: not found

mise à jour

J'ai découvert que l'utilisateur root utilise bin/ash par défaut, que je ne sais pas ce qu'il est. Donc, j'invoquais bin/sh jfrog manuellement et je reçois

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

Toute idée de ce que je fais mal? Je soupçonne que cela a à voir avec seulement l'utilisateur root existant dans le conteneur.

+0

Je pense que nous avons besoin de plus de détails. S'il vous plaît voir http://stackoverflow.com/help/mcve – BMitch

+0

mis à jour la question – LetsPlayYahtzee

Répondre

1

Le script que vous exécutez commence par:

#!/bin/bash 

Bash ne sont pas inclus avec Alpine par défaut. Vous pouvez l'installer avec:

apk update && apk add bash 

Notez que alpine est assez dépouillé par la conception, donc il peut y avoir d'autres dépendances manquantes que vous aurez besoin d'ajouter pour faire ce travail de script.

+0

J'ai fait la question un peu plus spécifique car il s'avère que mon problème est spécifiquement de savoir comment lancer 'jfrog' sur un conteneur Linux alpin. Votre suggestion a résolu le problème pour le conteneur 'ubuntu' si – LetsPlayYahtzee

2

Je ne suis pas sûr, mais l'exécutable JFrog est lié dynamiquement, et ldd jfrog vous obtenez:

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) 

Comme vous pouvez le voir, vous avez des dépendances libc et alpin viennent avec MUSL. Vous pouvez essayer d'ajouter apk add libc6-compat mais je ne suis pas sûr que cela fonctionnera

+0

non:/je pense que je devrais utiliser curl au lieu de' jfrog' – LetsPlayYahtzee

1

le problème est, que jfrog cli a été compilé contre glibc et alpin linux fournit seulement uclibc. Pour le faire tourner sous alpin ce n'est pas trivial, il faut installer un bac à sable plus grand que l'alpin env. https://wiki.alpinelinux.org/wiki/Running_glibc_programs

Une autre possibilité est de compiler le binaire jPEG en alpin. Ce Dockerfile a travaillé pour moi.

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

J'ai eu une erreur à propos de "Vous n'êtes pas actuellement sur une branche." lorsque vous essayez d'utiliser ce dockerfile – rwilson04

+0

A dû utiliser 'RUN GOOS = linux aller à la place github.com/jfrogdev/jfrog-cli-aller/jfrog-cli/jfrog' – rwilson04