2017-09-28 5 views
0

Vielen Dank für das Lesen meines Beitrags.Wie docker exec eine Shell builtin Docker Container speziell auf Ubuntu Docker Bild/Container

Problem:

# docker ps 
CONTAINER ID  IMAGE     COMMAND    
35c8b832403a  ubuntu1604:1 "sh -c /bin/sh"  

# docker exec -i -t 35c8b832403a type type 
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: \"type\": executable file not found in $PATH" 

# Dockerfile 
FROM ubuntu:16.04 

ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
RUN apt-get update && apt-get -y upgrade 
ENTRYPOINT ["sh", "-c"] 
CMD ["/bin/bash"] 

Beschreibung:

Mein Ziel ist es, "Typ" shell builtin gewesen in einer Art und Weise exec des Schreibens Docker wie unten

Docker exec ausführen zu erhalten -i-t 35c8b832403a Typ Typ (FAILED)

NICHT

Docker exec -i -t 35c8b832403a sh -c "type Typ" (PASSED)

Ich habe googeln um, in dem Behälter eine gewisse Modifikation tun (ändern/etc/profile,/etc/environment , bashrc) aber gescheitert.

Von der Docker Dokumentation selbst, hat es heißt es:

COMMAND im Standardverzeichnis des Behälters ausgeführt wird. Es hat das zugrundeliegende Bild ein benutzerdefiniertes Verzeichnis, das mit der WORKDIR Richtlinie in seiner Dockerfile spezifiziert wird, dieses wird stattdessen benutzt.

COMMAND sollte eine ausführbare Datei sein, ein verketteter oder ein quotierter Befehl wird nicht funktionieren. Beispiel: Andockfenster exec -ti my_container "echo ein & & b echo" wird nicht funktionieren, aber Docker exec -ti my_container sh -c "echo ein & & Echo b" wird.

aber scheint es IST MÖGLICH, wenn ich in der Lage die richtige Ausgabe VON DOCKER FEDORA zu erhalten (Dockerfile: FROM Filzhut: 25)

# docker ps 
CONTAINER ID  IMAGE     COMMAND    
2a17b2338518  fedora25:1 "sh -c /bin/sh" 

# docker exec -i -t 2a17b2338518 type type 
type is a shell builtin 

Frage:

Ist Gibt es eine Möglichkeit, dies auf Ubuntu Docker zu aktivieren? Bild/Container optimiert? Vagrantfile Konfiguration? Bitte helfen Sie.

Andere: in der Dockerfile

Mit Docker laufen, ich in der Lage wegen des "ENTRYPOINT" die richtige Ausgabe zu erhalten. Jedoch das Bild muss anstelle des Exports speichern sein.

Antwort

0

CMD und ENTRYPOINT sind bedeutungslos, wenn Sie docker exec ausführen. Die verbleibenden Argumente werden als Befehl verwendet und innerhalb des bereits vorhandenen Containers ausgeführt.

Vielleicht wollten Sie docker run verwenden?

+0

Schade für mich. Das Use-Case-Problem ist, 'Docker exec' mit dem Argument' type' zu ​​verwenden. – sangelion

0

Nur für den Fall, um Typ wie erwartet ausführen zu können, müsste es Teil des Pfades sein. ein Shell-builtin sein würde, weil nicht helfen, wie Sie gesagt haben, Sie nicht /bin/bash -c 'type type'

ausführen möchten Wenn Sie type ausgeführt als builtin Shell-Befehl haben wollen, dies bedeutet, dass Sie eine Shell /bin/bash oder /bin/sh ausführen müssen, und ausführen ‚type Typ‘ dann auf sie, es /bin/bash -c 'type type'

Schließlich machen, wie @Henry sagte docker exec ist eine der vollständige Befehl, der ausgeführt wird, und es gibt keinen Platz für CMD oder ENTRYPOINT darauf.

+0

Korrigieren Sie mich, wenn ich mich geirrt habe ... meinst du, es ist unmöglich, 'docker exec'-Typ zu verwenden Typ" 'nur, stattdessen brauche ich noch um/bin/{bash, sh} -c einzubinden, um den 'docker exec"/bin/bash -c type type "' auszuführen. Wie kann Fedora Image/Container dies unterstützen? Ich habe das Fedora image/container nach Typ eingecheckt, sie haben/bin/type was in der Shell mit 'buildin type $ $" geschrieben ist, leider gibt es kein/bin, das für buildin erstellt wird, aber trotzdem den gleichen Fehler erzeugt dieses Mal ist es beklagen, dass das Gebäude nicht da war. – sangelion

+0

Schade für mich. Das Use-Case-Problem besteht darin, 'docker exec' mit dem Argument' type type' zu ​​verwenden. – sangelion

+0

Wie gesagt, wenn Sie 'type type' ausführen wollen, sollte im Pfad eine Binärdatei namens' type' existieren. Es geht nicht anders. Und unter Berücksichtigung dieses Typs ist eine eingebaute Shell, und ich habe keine Möglichkeit gefunden, eine bestimmte Binärdatei nur dafür zu haben, würde ich sagen, Ihre einzige Möglichkeit, ein Skript in dem Pfad mit einem solchen Namen zu generieren, um die Shell auszulösen Befehl. – txomon