Search code examples
javadockereclipse

How to connect eclipse with docker


My Eclipse version is Photon and docker version is 18.06.0-ce-mac70.

I want to execute the Docker command when I issue shell script commands on Eclipse.

But when I use a shell script, the ls command works well, but not docker + command

Error Stack trace :

    `Exception in thread "main" java.io.IOException: Cannot run program 
    "docker": error=2, No such file or directory
    at            java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
    at java.base/java.lang.Runtime.exec(Runtime.java:635)
    at java.base/java.lang.Runtime.exec(Runtime.java:459)
    at java.base/java.lang.Runtime.exec(Runtime.java:356)
    at dbUpdate.ShellCommander.shellCmd1(ShellCommander.java:36)
    at dbUpdate.ShellCommander.main(ShellCommander.java:29)
    Caused by: java.io.IOException: error=2, No such file or directory
    at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
        at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:339)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:270)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
    ... 6 more

And the code:

`package dbUpdate;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;`

    public class ShellCommander {



    static Scanner sc = new Scanner(System.in);
    static String carSSID;
    static String target;
    static String IPAddress;

    public static void main(String[] args) throws Exception {

        String command = "docker ps";
        shellCmd1(command);
    }


    public static void shellCmd1(String command) throws Exception {
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(command);
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
        }
    }
}

Solution

  • Java doesn't search your PATH for commands. On my mac docker is in /usr/local/bin; I also would prefer a ProcessBuilder over Runtime.exec. Like

    public static void main(String[] args) throws Exception {
        String command = "/usr/local/bin/docker ps";
        shellCmd1(command);
    }
    
    public static void shellCmd1(String command) throws Exception {
        ProcessBuilder pb = new ProcessBuilder(command.split("\\s+"));
        pb.inheritIO();
        Process p = pb.start();
        p.waitFor();
    }