2014-04-12 4 views
8

Dies funktioniert:Docker -i -t image/bin/bash laufen - Quelldateien zuerst

# 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]:/# 

Frage: Wie konnte ich source eine Datei in die Schale? (das funktioniert nicht)

$ 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]:/# 

Antwort

-2

Ich glaube nicht, dass Sie das tun können, zumindest jetzt nicht. Was Sie tun können, ist Ihr Bild ändern, und fügen Sie die Datei, die Sie Quelle wollen, etwa so:

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

'Quelle' ist ein eingebauter. Es existiert nicht als 'Befehl', also gibt es nur einen Fehler. – Gerrat

4

In meinem Fall verwende ich RUN source Befehl in einem Dockerfile (die Verwendung von/bin/bash läuft) install nvm für node.js

Hier ist ein Beispiel.

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

Dies funktioniert nur während 'docker build' und nur für die gleiche' RUN' Anweisung. Die Datei wird nicht bereitgestellt, wenn das resultierende Bild später als eigenständiger oder interaktiver Container gestartet wird. –

1

wollte ich etwas ähnliches, und ein bisschen auf Ihre Idee erweitern, kam mit den folgenden:

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, die Dateibeschreibung des Inhalts statt Bashrc
  • verwenden 1002<&0 speichert Stdin
  • <<<$(echo PS1=it_worked:) puts PS1=it_worked: auf stdin
  • 1001<&0 bewegt diese stdin 1001 bis fd, die wir als rcfile
  • 0<&1002 verwenden stellt die stdin, die wir zunächst gespeichert
0

Sie .bashrc in interaktiven Containern verwenden können:

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

Dann einfach laufen wie üblich mit docker run -it --rm some/image bash.

Beachten Sie, dass dies nur mit interaktiven Containern arbeiten wird.

Verwandte Themen