es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecutando comando Docker en Java.

Estoy tratando de ejecutar este comando en Docker a través de Java, pero no sé por qué solo funciona cuando ejecuto el comando en la máquina host y no a través de Java (cuando lo ejecuto en Java no agrega ni dice nada). Estoy 99% seguro de que el problema son los “>>” del echo, pero no sé cómo solucionarlo.

private void doCommand(){

    String command = "docker exec -i -t vsftpd bash -c 'echo -e \"myuser5\\nmypass\" >> /etc/vsftpd/virtual_users.txt'";

    try {
        ProcessBuilder pb = new ProcessBuilder(command);

        Process process = pb.start();

        InputStream inputStream = process.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

        String line = null;

        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }catch (Exception e){
        e.printStackTrace();
    }

}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El comando parece estar utilizando muchas comillas y caracteres de escape, lo que puede estar causando problemas. Una posible solución es separar los argumentos del comando y usar un arreglo en lugar de una cadena. Puedes probar el siguiente código:

    private void doCommand(){
    
        String[] command = {"docker", "exec", "-i", "-t", "vsftpd", "bash", "-c", "echo -e \"myuser5\\nmypass\" >> /etc/vsftpd/virtual_users.txt"};
    
        try {
            ProcessBuilder pb = new ProcessBuilder(command);
    
            Process process = pb.start();
    
            InputStream inputStream = process.getInputStream();
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    
            String line = null;
    
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    
    }
    

    Esto debería ejecutar correctamente el comando echo y redirigir la salida al archivo virtual_users.txt.

Comments are closed.