Docker Java Application failing at obtaining input from console

I am trying to create a docker image for my java application. At startup this application needs to be given a password (currently via console).

I tried several methods of obtaining input however they have all failed. Is this a limitation of docker and if so is there a workaround?

  • docker COPY with file globbing
  • Elasticsearch Unreachable: Connection refused
  • what is the use of nested containers and root privilege isolation
  • How to read environment variable in Nodejs?
  • Cannot install mysql-server in docker
  • How to get client IP from request inside haproxy docker container?
  • For this snippet:

    Console console = System.console();
    if(console == null){
        System.out.println("console is null!!");
    } else {
        System.out.println("Input password: ");
        char[] password = console.readPassword("Pass: ");
    }
    

    System.console() is returning null.

    For this snippet:

        System.out.println("Creating InputStreamReader");
        InputStreamReader s = new InputStreamReader(System.in);
        System.out.println("Creating BufferedReader");
        BufferedReader r = new BufferedReader(s);
        System.out.println("Input password: ");
        String password = r.readLine();
        System.out.println("Password: "+password);
    

    the input is automatically skipped, (resulting in the String password to be null) with the program continuing execution as if there was no input requested. (password is null)

    For this snippet:

    Scanner s = new Scanner(System.in);
    System.out.println("Input password: ");
    String password = s.next();
    

    I get

    Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:907)
        at java.util.Scanner.next(Scanner.java:1416)
        at com.docker.test.DockerTest.testScanner(DockerTest.java:49)
        etc...
    

    I am running the program from within my image using docker run test/plaintest1

    my dockerfile is as follows

    FROM centos
    RUN yum install -y java-1.7.0-openjdk
    ADD DockerTest.jar /opt/ssm
    ENTRYPOINT ["java","-jar","/opt/ssm/DockerTest.jar"]
    CMD [""]
    

  • Editing Docker container FS using Atom/Sublime-Text?
  • YARN run MR job with DCE (docker container executor) stuck on ACCEPTED
  • How can I pass a multi-line variable to a docker container?
  • What is the gcloud API for the Google Container Registry
  • docker-registry v2.2.0 S3 config not overwritten
  • Docker workflow for development- running containers build up
  • 2 Solutions collect form web for “Docker Java Application failing at obtaining input from console”

    Solved it.

    By running the command using the -i and -t parameters you can be allowed to enter the password. using all 3 methods.

    so basically docker run -i -t <imagename> <params>

    I was struggling with this yesterday for most of the day. The problem seemed to have been a broken base image supplied by the official CentOS repo. If you look on your base image you will notice that /opt/java exists on the base image. That’s the clue that you have the broken image. Simply pull the latest image with “docker pull centos” and you’ll be back in action. They must have fixed it sometime last night. You’ll notice the hash of the image has changed even though it shows that the image was uploaded 2 weeks ago. Someone is trying to hide their tracks! Haha. Your Dockerfile is fine.

    Regards
    Wynand

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.