2015-02-13 7 views
100

Sto provando a eseguire comandi MULTIPLI come questo.esecuzione docker <IMAGE><COMANDI MULTIPLI>

docker run image cd /path/to/somewhere && python a.py 

Ma questo mi dà "No such file or directory" errore perché viene interpretato come ...

"docker run image cd /path/to/somewhere" && "python a.py" 

sembra che alcuni caratteri di escape come "" o sono necessari().

Così ho anche provato

docker run image "cd /path/to/somewhere && python a.py" 
docker run image (cd /path/to/somewhere && python a.py) 

ma questi non ha funzionato.

Ho cercato Docker Run Reference ma non ho trovato alcun suggerimento sui caratteri ESCAPE.

risposta

198

Per eseguire più comandi in finestra mobile, utilizzare /bin/bash -c e virgola ;

docker run image /bin/bash -c "cd /path/to/somewhere; python a.py" 
+0

Grazie per il vostro suggerimento! Ho semplicemente provato [immagine di esecuzione docker "cd/bin; ls"] e ho ricevuto i seguenti messaggi di errore. [exec: "cd/bin; ls": stat cd/bin; ls: nessun file o directory simile] [Risposta errore dal demone: Impossibile avviare il contenitore] – ai0307

+0

Chiunque trovi che questa risposta potrebbe essere interessata a come utilizzare qui i documenti per inviare i comandi a un contenitore: [ecco la mia risposta a un'altra domanda come questa qui documenti, sentitevi liberi di verificarlo] (http://stackoverflow.com/a/35767573/433835). –

+6

'finestra mobile esegue alpha sh -c" ls | wc >> xxx "' questo mi aiuta molto, quando bash non è disponibile. –

19

Si può fare questo un paio di modi:

  1. Utilizzare l'opzione -w per cambiare la directory di lavoro:

    -w, --workdir = "" Directory di lavoro all'interno del contenitore

    https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w

  2. Passare l'intero argomento a/bin/bash:

    docker run image /bin/bash -c "cd /path/to/somewhere; python a.py" 
    
+0

Grazie per il vostro aiuto! Questo mi aiuta davvero. – ai0307

+0

Nessuna menzione di '--workdir' nel link fornito. La pagina probabilmente è stata spostata/modificata. Potrebbe essere aggiornato a https://docs.docker.com/engine/reference/run/#workdir o https://docs.docker.com/engine/reference/commandline/run/ – marcv

1

È inoltre possibile comandi tubo all'interno del contenitore Doker, bash -c "<command1> | <command2>" ad esempio:

docker run img /bin/bash -c "ls -1 | wc -l" 

Ma, senza invocare il guscio in il telecomando l'uscita verrà reindirizzato al terminale locale.

Problemi correlati