2015-12-31 7 views
26

Sto provando a eseguire uno script durante il mio processo di costruzione nel mio Dockerfile. Ma sembra non funzionare.Eseguire uno script in Dockerfile

ho provato in questo modo:

FROM php:7-fpm 
ADD bootstrap.sh/
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"] 

anche in questo modo:

FROM php:7-fpm  
ADD bootstrap.sh/
RUN bash -c "/bootstrap.sh" 

E anche bu esecuzione il mio contenitore in esecuzione:

docker exec symfony /bin/bash -c "/bootstrap.sh" 

Niente sembra funzionare.

Sai come si fa?

+0

è il nome di file corretto? –

+0

sì il nome del file è corretto – Kevin

+0

'bootstarp.sh' ha il bit eseguibile impostato? – jwodder

risposta

34

RUN e ENTRYPOINT sono due modi diversi per eseguire uno script.

RUN significa che crea un contenitore intermedio, esegue lo script e blocca il nuovo stato di quel contenitore in una nuova immagine intermedia. Lo script non verrà eseguito successivamente: la tua immagine finale dovrebbe riflettere il risultato di quello script.

ENTRYPOINT significa che l'immagine (che non ha ancora eseguito lo script) creerà un contenitore e lo eseguirà.

In entrambi i casi, è necessario aggiungere lo script e una RUN chmod +x /bootstarp.sh è una buona idea.

Si deve anche iniziare con un shebang (come #!/bin/sh)

Considerando lo script (KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh: un paio di git config --global comandi), sarebbe meglio eseguire quello script una volta nella vostra Dockerfile, ma avendo cura di utilizzare il diritto utente (il file git configurazione globale è% HOME%/gitconfig, che di default è quella/root.)

Aggiungi al your Dockerfile:

RUN /bootstart.sh 

Quindi, quando si esegue un contenitore, controllare il contenuto di /root/.gitconfig per confermare che lo script è stato eseguito.

+3

Inoltre, potresti aver inteso 'bootstrap.sh' invece di' bootstarp.sh': vedi http://stackoverflow.com/a/1254561/6309 – VonC

+0

Cool! Funziona molto bene con RUN /bootstrap.sh – Kevin

+0

Lo shebang sulla prima riga lo ha fatto per me, grazie! :) – GDICommander

14

Tentare di creare script con ADD il comando e la specificazione delle directory di lavoro Ti piace questa ("script" è il nome della sceneggiatura e /root/script.sh è dove si desidera nel contenitore, può essere diverso percorso:

ADD script.sh /root/script.sh 

in questo caso ADD deve venire prima CMD, se ne avete uno BTW è modo intelligente per importare script in qualsiasi posizione nel contenitore dalla macchina host

in CMD luogo [./script]

Dovrebbe eseguire automaticamente lo script

È inoltre possibile specificare come WORKDIR/root, quindi you'l essere posizionati automaticamente nella radice, all'avvio di un contenitore

Problemi correlati