java.util.NoSuchElementException: No line found ... после запуска программы с помощью Docker'a

Когда я искал информацию об ошибке:

java.util.NoSuchElementException: No line found ...

я нашел такой же вопрос здесь https://stackoverflow.com/questions/7209110/java-util-nosuchelementexception-no-line-found и узнал что при работе со Scanner нужно проверить, есть ли следующая строка с помощью метода hasNextLine().
В моем коде, в строке где я хочу записать пользовательский ввод в переменную line:

line = sc.nextLine();

я пробовал написать так:

if (sc.hasNextLine()){
  line = sc.nextLine();
}

и это не помогло.

Но что еще интереснее, что когда я запускаю свой код в NetBeans или просто с помощью cmd окна, то все работает без каких либо ошибок. Данная ошибка появилась когда я точно такой же код запускаю через Docker. Может ли это быть как то с докером связанно - не знаю, имеет ли отношение здесь вообще Docker - тоже не знаю. Во всяком случае интересно почему программа не на докере работает, а с ним нет.

Вот файл который выдает ошибку:

import java.io.*;
import java.net.*;
import java.util.*;

public class CLI {  
    public static void main(String[] args) {
        // establish a connection by providing host and port number
        try (Socket socket = new Socket("localhost", 1234)) {
            // writing to server
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            // reading from server
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // object of scanner class
            Scanner sc = new Scanner(System.in);
            String line = null;
            while (!"exit".equalsIgnoreCase(line)) {
                // reading from user
                System.out.print("Enter command: ");
                line = sc.nextLine();
                // sending the user input to server
                out.println(line);
                out.flush();
                // displaying server reply
                System.out.println("Server replied: " + in.readLine().replaceAll("~", "\n  "));
            }
            // closing the scanner object
            sc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


Ответы (1 шт):

Автор решения: Alexander Pavlov

Чтобы иметь возможность взаимодействовать с контейнером через консоль, контейнер должен быть запущен в интерактивном режиме docker run -i ....

https://docs.docker.com/engine/reference/run/#foreground

-i              : Keep STDIN open even if not attached
→ Ссылка