"docker ps" aufrufen

krgewb

Top Contributor
Ich schaffe es nicht, mit meiner Anwendung "docker ps" auszuführen. Mit meiner anderen Anwendung funktioniert es aber.

Java:
    @Transactional
    public String executeDockerPs() {

        boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
        if (isWindows) {
            return null;
        }

        try {
            Process process = Runtime.getRuntime().exec("docker ps");

            StringBuilder output = new StringBuilder();

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }

            int exitVal = process.waitFor();
            if (exitVal == 0) {
                return output.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return null;
    }

In meinem Start-Stop-Skript steht bereits:
Java:
--mount 'type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock' \

Fehlermeldung:
Code:
java.io.IOException: Cannot run program "docker": error=2, No such file or directory
 

ps-docker

Mitglied
yup, da fehlt einfach nur ein apt update und apt install docker -y (das linkt dann Docker richtig) vorher.

Viel Rätselraten hier bei den spärlichen Infos.
 

Adlerkopf

Neues Mitglied
Das ist richtig. Das ist ein TCP-Socket. Aber der Container ist hierbei in der Funktion des Clients und der Host in der Funktion des Servers.

Ich weiß, dass du zwar keinen Bildungsauftrag hast, aber deshalb sollte man Anfängern nicht wissentlich etwas Falsches erzählen.
 

Robert Zenz

Top Contributor
Wobei das mit dem "wissentlich" nehme ich zurueck, ich glaube das stimmt einfach nicht.

---

Um noch etwas produktives beizutragen, seit 1.5 gibt es den ProcessBuilder welcher etwas komfortabler sein kann als direkt exec aufzurufen.

Wenn du dann noch Java 9+ hast, kannst du auch sehr billig die gesamte Ausgabe des Kommandos auslesen:

Java:
byte[] rawOutput = process.getInputStream().readAllBytes();
String output = new String(rawOutput, StandardCharsets.UTF_8);

Beachte dabei aber immer dass denn der Prozess den Stream nicht schlieszt, haengt dein Programm an der Stelle.

Eine weitere, vielleicht etwas ueble, Variante waere dass man die Umgebung nutzt um das entsprechende Programm zu finden:

Java:
Process process = Runtime.getRuntime().exec("/usr/bin/env docker ps");

env ist immer unter /usr/bin/ verfuegbar und durchsucht die Umgebung nach dem entsprechenden Programm, spielt also keine Rolle ob das dann unter /bin/, /usr/bin/, /usr/local/bin/, oder irgendwo anders liegt solange die Umgebung korrekt konfiguriert ist um dies zu finden. Der gleiche Mechanismus wird bei Skell-Skripten eingesetzt fuer die Shebang:

Code:
#!/usr/bin/env bash
 

krgewb

Top Contributor
Jetzt geht es. In der Datei namens Dockerfile muss stehen:
Code:
RUN apt-get update && apt-get install -y docker.io && apt-get clean && rm -rf /var/lib/apt/lists/*
 

krgewb

Top Contributor
Ich habe ein Start-Stop-Skript für eine meiner Anwendungen. Nun will ich ein Java-Programm schreiben, das die Datei ausführt. Das könnte so aussehen:

Java:
    @Transactional
    public String executeCommand() {

        boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
        if (isWindows) {
            return null;
        }

        try {
            Process process = Runtime.getRuntime().exec("/opt/docker/abc/video/services/user_interface_2/start_stop_user_interface_2.sh");

            StringBuilder output = new StringBuilder();

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }

            int exitVal = process.waitFor();
            if (exitVal == 0) {
                return output.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return null;
    }

Nur leider funktioniert das nicht.
 

Oneixee5

Top Contributor
Ja nach Distribution, oder was der Nutzer installiert hat muss es mindestens eine Shell geben:
/bin/bash
/bin/sh
/bin/zsh
/bin/fish
sind so die üblichsten und sind meisten als link im Ordner /bin zu finden

Ein Shebang ist die erste Zeile im Script, also bspw: #!/bin/bash - ist also ein Zeiger auf die Shell, mit welcher des Terminal das Script ausführen soll.
Vermutlich führt das der Processbuilder aber nicht so aus wie ein Linux-Terminal. Deshalb musst du das selbst machen. Was du ausführen musst wäre demnach bspw:
...exec("/bin/bash /opt/docker/abc/video/services/user_interface_2/start_stop_user_interface_2.sh");

Du kannst natürlich auch ein Terminal starten und das Script als Parameter übergeben. Dann passiert aber das Gleiche wie in Windows(cmd) - es erscheint ein (schwarzes) Fenster.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Shiro, Keycloak und Docker -> warum nur mit expliziter IP Adresse? Java Basics - Anfänger-Themen 14
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
hubmar Fehler beim mp4-datei aufrufen, nach dem zweiten aufruf Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
G Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
G Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W Methoden aufrufen - auch klassenübergreifend? Java Basics - Anfänger-Themen 9
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
H Kann man Methoden öfter aufrufen? Java Basics - Anfänger-Themen 2
L Webseite aufrufen (HTTP) Java Basics - Anfänger-Themen 8
G Rekursive Methode mit 2 Aufrufen Java Basics - Anfänger-Themen 1
T getAttribut in einer Methode aufrufen Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
M Java GUI explorer aufrufen um Pfad zu bekommen Java Basics - Anfänger-Themen 3
Y Java andere Klasse aufrufen Java Basics - Anfänger-Themen 6
V Collections Methode in der Methode aufrufen Java Basics - Anfänger-Themen 2
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
M Klassen Methode in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
M Methode in anderer Klasse aufrufen Java Basics - Anfänger-Themen 5
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
J Kompilierte Klasse mit Namespace per CMD aufrufen Java Basics - Anfänger-Themen 8
M Klassen Klasse aus anderer Klasse "aufrufen" Java Basics - Anfänger-Themen 2
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
W Wie kann ich meine Methode aufrufen? Java Basics - Anfänger-Themen 29
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
scratchy1 Methode aufrufen Java Basics - Anfänger-Themen 59
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
C Methoden Methode Variabel aufrufen Java Basics - Anfänger-Themen 2
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
E Threads Methode einer Wartenden Klasse aufrufen Java Basics - Anfänger-Themen 3
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
J Methoden Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 12
B Funktionen von außen aufrufen Java Basics - Anfänger-Themen 1
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
E Referenzvariable in anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
E Klassen Referenzvariable in anderer Klasse aufrufen. Java Basics - Anfänger-Themen 1
F Methode anderer Klasse aufrufen Java Basics - Anfänger-Themen 1
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
G Stringwerte aus anderen Klassen aufrufen. Java Basics - Anfänger-Themen 19
A Methode aufrufen in main-Methode Java Basics - Anfänger-Themen 5
K Compiler-Fehler Objektmethode aus einer statischen Methode heraus aufrufen Java Basics - Anfänger-Themen 34
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
W Methoden Methode ohne Parameter auf Instanz eines Objekts aufrufen? Java Basics - Anfänger-Themen 14
Azazel Klasseninstanzen zufällig aufrufen Java Basics - Anfänger-Themen 3
J Open Office Property Value mit Java aufrufen Java Basics - Anfänger-Themen 0
S Methoden Methode einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 5
Ghostman1711 Pi berechnung Methode aufrufen Java Basics - Anfänger-Themen 2
W Methoden Methode auf Array aufrufen, und dieses Array dabei ändern? Java Basics - Anfänger-Themen 10
R Methoden Nicht statische Methode aus Main aufrufen Java Basics - Anfänger-Themen 2
A .jar über Webbrowser aufrufen Java Basics - Anfänger-Themen 2
J Methode in main-Methode aufrufen Java Basics - Anfänger-Themen 5
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
H Klassen varibale einer klasse in einer anderen klasse aufrufen und häufigkeit ausgeben Java Basics - Anfänger-Themen 22
1 Arraylist in anderer Klasse aufrufen Java Basics - Anfänger-Themen 11
T Externe Methoden aufrufen Java Basics - Anfänger-Themen 3
G Methode einer Abstrakten Klasse aufrufen Java Basics - Anfänger-Themen 1
U Erste Schritte Kann length() für Array nicht aufrufen Java Basics - Anfänger-Themen 2
Fishmeaker Methoden mit Methoden aufrufen - Programm hängt sich auf Java Basics - Anfänger-Themen 5
A Erste Schritte Programm in Shell mit bestimmter Java-Version aufrufen Java Basics - Anfänger-Themen 10
Q Methode eines bereits erzeugten Objekts von einem anderen Objekt aus aufrufen Java Basics - Anfänger-Themen 6
S Klassen Applet extern aufrufen Java Basics - Anfänger-Themen 1
P Internetseite aufrufen Java Basics - Anfänger-Themen 4
M Mailprogramm aufrufen Java Basics - Anfänger-Themen 6
C Array - Methode in einer anderen Aufrufen Java Basics - Anfänger-Themen 1
B Liste in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
F Um 14:00 eine Methode aufrufen Java Basics - Anfänger-Themen 5
B Methoden Array Methode aufrufen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben