Comment utiliser bash avec une image Docker basée sur Alpine?

212

J'ai créé une image docker depuis openjdk: 8-jdk-alpine mais lorsque j'essaie d'exécuter des commandes simples, j'obtiens les erreurs suivantes:

RUN bash
/bin/sh: bash: not found

RUN ./gradlew build
env: can't execute 'bash': No such file or directory
diugalde
la source
26
Pour les googleurs:docker run --rm -i -t alpine /bin/sh
Nabil Kadimi
Démarrer le conteneur (de manière interactive): docker exec -it container_id / bin / sh
user2243747

Réponses:

339

L'image de docker Alpine n'a pas bash installé par défaut. Vous devrez ajouter les commandes suivantes pour obtenir bash:

RUN apk update && apk add bash

Si vous utilisez, Alpine 3.3+vous pouvez simplement faire

RUN apk add --no-cache bash

pour conserver une taille d'image Docker petite. (Merci au commentaire de @sprkysnrky)

anubhava
la source
4
Ce apk upgraden'est pas obligatoire.
Matt
1
Je préfère utiliser la recommandation de @Yuva en utilisant RUN /bin/shau lieu de RUN bin/bash
Alex Montoya
1
Cela dépend entièrement de vous, de nombreuses personnes ont besoin de bashfonctionnalités spécifiques.
anubhava
222

Essayez d'utiliser RUN /bin/shau lieu de bash.

Yuva
la source
35
OP a demandé bash. sh n'est pas bash.
phil294
117
Mais c'est un commentaire très utile de toute façon - la plupart des gens iront bien avec sh - et cela ne nécessite pas 50 Mo supplémentaires de taille d'image
kboom
6
Facile et simple. La plupart du temps, nous n'avons besoin que d'exécuter des commandes de merde (ls, ps, peu importe), sh couvre ces scénarios. Merci!
Bevilaqua
6
Je cherchais bash, mais sh a également aidé :)
Vedran Maricevic.
6
@kboom, le bashpackage ajoute environ 4 Mo à la taille de alpine:3.8, le doublant à peu près, mais toujours loin de 50 Mo.
valiano
19
RUN /bin/sh -c "apk add --no-cache bash"

travaillé pour moi.

user1738546
la source
1
La partie initiale de la commande RUN n'est pas nécessaire. Vous pouvez simplement écrire RUN apk add --no-cache bashdirectement
Meiogordo
1

Pour installer bash, vous pouvez faire:

RUN apk add --update bash && rm -rf /var/cache/apk/*

Si vous ne souhaitez pas ajouter de taille supplémentaire à votre image, vous pouvez utiliser ashou shqui est livré avec alpine.

Référence: https://github.com/smebberson/docker-alpine/issues/43

Sahith Vibudhi
la source