¿Cómo usar bash con una imagen acoplable basada en Alpine?

211

Creé una imagen de docker desde openjdk: 8-jdk-alpine pero cuando trato de ejecutar comandos simples obtengo los siguientes errores:

RUN bash
/bin/sh: bash: not found

RUN ./gradlew build
env: can't execute 'bash': No such file or directory
diugalde
fuente
26
Para googlers:docker run --rm -i -t alpine /bin/sh
Nabil Kadimi el
Iniciar contenedor (interactivamente): docker exec -it container_id / bin / sh
user2243747

Respuestas:

337

Alpine docker image no tiene bash instalado de manera predeterminada. Deberá agregar los siguientes comandos para obtener bash:

RUN apk update && apk add bash

Si estás usando, Alpine 3.3+entonces puedes hacer

RUN apk add --no-cache bash

para mantener pequeño el tamaño de la imagen de la ventana acoplable. (Gracias por comentar de @sprkysnrky)

anubhava
fuente
44
El apk upgradeno es requerido.
Matt
1
Prefiero usar la recomendación de @Yuva usando en RUN /bin/shlugar de RUN bin/bash
Alex Montoya
1
Eso depende totalmente de usted, muchas personas necesitan bashfunciones específicas.
Anubhava
219

Intenta usar en RUN /bin/shlugar de bash.

Yuva
fuente
35
OP pidió bash. sh no es bash.
phil294
115
Pero este es un comentario muy útil de todos modos: la mayoría de la gente estará bien con sh, y no requiere 50mb adicionales de tamaño de imagen
kboom el
66
Fácil y directo. La mayoría de las veces solo necesitamos ejecutar comandos de mierda (ls, ps, lo que sea), sh cubre esos escenarios. ¡Gracias!
Bevilaqua
66
Estaba buscando bash, pero sh también ayudó :)
Vedran Maricevic.
66
@kboom el bashpaquete agrega aproximadamente 4 MB al tamaño de alpine:3.8, duplicándolo aproximadamente, pero aún lejos de 50 MB.
valiano 01 de
19
RUN /bin/sh -c "apk add --no-cache bash"

trabajó para mi.

usuario1738546
fuente
1
La parte inicial del comando RUN es innecesaria. Puedes escribir RUN apk add --no-cache bashdirectamente
Meiogordo