2015-07-23 24 views
38

Sono nuovo di tecnologia di Docker, sto cercando di creare uno script di shell per la creazione di un contenitore di finestra mobile, il mio file di script si presenta come segueesecuzione di uno script all'interno di un contenitore finestra mobile utilizzando script di shell

#!bin/bash 

docker run -t -i -p 5902:5902 --name "mycontainer" --privileged myImage:new /bin/bash 

L'esecuzione di questo il file di script eseguirà il contenitore in una bash appena richiamata.

Ora ho bisogno di eseguire un file di script (test.sh), che è già all'interno del contenitore da quanto sopra determinato script di shell. (Es: cd /path/to/test.sh & & ./test.sh) Come farlo, non esitate a chiedere se lo scenario non è chiaro.

+1

perché non utilizzare '' WORKDIR' e cmd'? – Dharmit

risposta

45

È possibile eseguire un comando in un contenitore in esecuzione utilizzando docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:

docker exec mycontainer /path/to/test.sh 

E a correre da una sessione bash:

docker exec -it mycontainer /bin/bash 

E da lì si può eseguire lo script o qualsiasi altra cosa.

+1

e se devo prima entrare in/bin/bash e poi eseguire il comando all'interno di quella bash? – zappy

+1

Voglio dire che ho bisogno di eseguire 2 o più comandi in sequenza .... – zappy

+0

Modificato con comando per eseguire una shell interattiva –

48

Supponendo che il vostro contenitore finestra mobile è installato e funzionante, è possibile eseguire i comandi come:

docker exec mycontainer /bin/sh -c "cmd1;cmd2;...;cmdn" 
+1

Mi piace questa risposta; non è necessario accedere al contenitore finestra mobile per eseguire un comando o una serie di comandi. Grazie! –

+0

Sapete come fare un ulteriore passo avanti e passare l'intero comando ('/ bin/sh -c" cmd1; cmd2; ...; cmdn "') come valore di una variabile di shell? Chiedo perché 'docker run' sembra aspettarsi un singolo comando e singoli argomenti non quotati piuttosto che una stringa quotata. – meowsqueak

+0

@meowsqueak http://stackoverflow.com/a/43019719/1663462 –

5

Stavo cercando una risposta per questa stessa domanda e ho trovato ENTRYPOINT in soluzione Dockerfile per me.

Dockerfile

... 
ENTRYPOINT /my-script.sh ; /my-script2.sh ; /bin/bash 

Ora gli script vengono eseguiti quando inizio il contenitore e ottengo il prompt bash dopo che gli script è stato eseguito.

0

Se si desidera eseguire lo stesso comando su più istanze si può fare questo:

for i in c1 dm1 dm2 ds1 ds2 gtm_m gtm_sl; do docker exec -it $i /bin/bash -c "service sshd start"; done 
Problemi correlati