Come usare bash con un'immagine docker con base alpina?


211

Ho creato un'immagine docker da openjdk: 8-jdk-alpine ma quando provo ad eseguire semplici comandi ottengo i seguenti errori:

RUN bash
/bin/sh: bash: not found

RUN ./gradlew build
env: can't execute 'bash': No such file or directory

26
Per i googler:docker run --rm -i -t alpine /bin/sh
Nabil Kadimi,

Avvia container (in modo interattivo): docker exec -it container_id / bin / sh
user2243747

Risposte:


337

L'immagine docker alpina non ha bash installato per impostazione predefinita. Sarà necessario aggiungere i seguenti comandi per ottenere bash:

RUN apk update && apk add bash

Se stai usando Alpine 3.3+, puoi semplicemente farlo

RUN apk add --no-cache bash

per mantenere ridotte le dimensioni dell'immagine della finestra mobile. (Grazie al commento di @sprkysnrky)


4
Non apk upgradeè richiesto.
Matt,

1
Preferisco usare la raccomandazione di @Yuva usando RUN /bin/shinvece di RUN bin/bash
Alex Montoya il

1
Dipende solo da te, molte persone hanno bisogno di bashfunzionalità specifiche.
anubhava

219

Prova a usare RUN /bin/shinvece di bash.


35
OP ha chiesto bash. sh non è bash.
phil294,

115
Ma questo è comunque un commento molto utile - la maggior parte delle persone andrà bene con sh - e non richiede ulteriori 50 mb di dimensione dell'immagine
kboom

6
Facile e diretto. La maggior parte delle volte abbiamo solo bisogno di eseguire comandi di merda (ls, ps, qualunque cosa), sh copre quegli scenari. Grazie!
Bevilaqua,

6
Stavo cercando bash, ma anche sh mi ha aiutato :)
Vedran Maricevic.

6
@kboom il bashpacchetto aggiunge circa 4 MB alla dimensione di alpine:3.8, raddoppiandolo all'incirca, ma comunque lontano da 50 MB.
valiano,

19
RUN /bin/sh -c "apk add --no-cache bash"

ha funzionato per me.


1
La parte iniziale del comando RUN non è necessaria. Puoi semplicemente scrivere RUN apk add --no-cache bashdirettamente
Meiogordo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.