2014-04-12 1 views
8

Questo funziona:finestra mobile gestito -i -t immagine/bin/bash - file prima fonte

# echo 1 and exit: 
$ docker run -i -t image /bin/bash -c "echo 1" 
1 
# exit 

# echo 1 and return shell in docker container: 
$ docker run -i -t image /bin/bash -c "echo 1; /bin/bash" 
1 
[email protected]:/# 

Domanda: come potrei source un file nella shell? (questo non funziona)

$ docker run -i -t image /bin/bash -c "source <(curl -Ls git.io/apeepg) && /bin/bash" 
# content from http://git.io/apeepg is sourced and shell is returned 
[email protected]:/# 

risposta

-2

Non penso che tu possa farlo, almeno non ora. Che cosa si potrebbe fare è modificare la vostra immagine, e aggiungere il file che si desidera fonte, in questo modo:

FROM image 
ADD my-file /my-file 
RUN ["source", "/my-file", "&&", "/bin/bash"] 
+0

'source' è un built-in. Non esiste come 'comando', quindi questo dà solo un errore. – Gerrat

4

Nel mio caso, io uso RUN source comando (che sarà eseguito utilizzando/bin/bash) in una Dockerfile per installa nvm per node.js

Ecco un esempio.

FROM ubuntu:14.04 

RUN rm /bin/sh && ln -s /bin/bash /bin/sh 
... 
... 
RUN source ~/.nvm/nvm.sh && nvm install 0.11.14 
+0

Funziona solo durante la 'costruzione finestra mobile' e solo per la stessa istruzione' RUN'. Il file non verrà estratto quando l'immagine risultante verrà successivamente avviata come contenitore indipendente o interattivo. –

1

Volevo qualcosa di simile, e in espansione un po 'sulla vostra idea, si avvicinò con il seguente:

docker run -ti --rm ubuntu \ 
    bash -c 'exec /bin/bash --rcfile /dev/fd/1001 \ 
          1002<&0 \ 
          <<<$(echo PS1=it_worked:) \ 
          1001<&0 \ 
          0<&1002' 
  • --rcfile /dev/fd/1001 utilizzerà contenuti che il file di descrittori, invece di .bashrc
  • 1002<&0 salva stdin
  • <<<$(echo PS1=it_worked:) mette PS1=it_worked: su stdin
  • 1001<&0 si muove questo stdin a fd 1001, che usiamo come rcfile
  • 0<&1002 ripristina lo stdin che abbiamo salvato inizialmente
0

È possibile utilizzare .bashrc in contenitori interattivi:

RUN curl -O git.io/apeepg.sh && \ 
    echo 'source apeepg.sh' >> ~/.bashrc 

Poi basta correre come al solito con docker run -it --rm some/image bash.

Si noti che questo sarà solo funziona con contenitori interattivi.